add action to emoji reacts

pull/638/head
Ryan Zhao
parent fe1b8ebb93
commit 965c1c48e5

@ -95,5 +95,7 @@ protocol ContextMenuActionDelegate : AnyObject {
func save(_ viewItem: ConversationViewItem)
func ban(_ viewItem: ConversationViewItem)
func banAndDeleteAllMessages(_ viewItem: ConversationViewItem)
func react(_ viewItem: ConversationViewItem, with emoji: String)
func showFullEmojiKeyboard(_ viewItem: ConversationViewItem)
func contextMenuDismissed()
}

@ -4,14 +4,16 @@ extension ContextMenuVC {
final class EmojiReactsView: UIView {
private let emoji: String
private let dismiss: () -> Void
private let work: () -> Void
// MARK: Settings
private static let size: CGFloat = 40
// MARK: Lifecycle
init(for emoji: String, dismiss: @escaping () -> Void) {
init(for emoji: String, dismiss: @escaping () -> Void, work: @escaping () -> Void) {
self.emoji = emoji
self.dismiss = dismiss
self.work = work
super.init(frame: CGRect.zero)
setUpViewHierarchy()
}
@ -38,20 +40,23 @@ extension ContextMenuVC {
// MARK: Interaction
@objc private func handleTap() {
work()
dismiss()
}
}
final class EmojiPlusButton: UIView {
private let dismiss: () -> Void
private let work: () -> Void
// MARK: Settings
public static let size: CGFloat = 28
private let iconSize: CGFloat = 14
// MARK: Lifecycle
init(dismiss: @escaping () -> Void) {
init(dismiss: @escaping () -> Void, work: @escaping () -> Void) {
self.dismiss = dismiss
self.work = work
super.init(frame: CGRect.zero)
setUpViewHierarchy()
}
@ -84,6 +89,7 @@ extension ContextMenuVC {
// MARK: Interaction
@objc private func handleTap() {
dismiss()
work()
}
}

@ -20,7 +20,7 @@ final class ContextMenuVC : UIViewController {
}()
private lazy var emojiPlusButton: EmojiPlusButton = {
let result = EmojiPlusButton(dismiss: snDismiss)
let result = EmojiPlusButton(dismiss: snDismiss) { self.delegate?.showFullEmojiKeyboard(self.viewItem) }
result.set(.width, to: EmojiPlusButton.size)
result.set(.height, to: EmojiPlusButton.size)
result.layer.cornerRadius = EmojiPlusButton.size / 2
@ -106,7 +106,11 @@ final class ContextMenuVC : UIViewController {
emojiPlusButton.pin(.right, to: .right, of: emojiBar, withInset: -Values.smallSpacing)
emojiPlusButton.center(.vertical, in: emojiBar)
let emojiLabels = ["🙈", "🙉", "🙊", "😈", "🥸", "🐀"].map { EmojiReactsView(for: $0, dismiss: snDismiss) }
let emojiLabels = UserDefaults.standard.getRecentlyUsedEmojis().map { emoji -> EmojiReactsView in
EmojiReactsView(for: emoji, dismiss: snDismiss) {
self.delegate?.react(self.viewItem, with: emoji)
}
}
let emojiBarStackView = UIStackView(arrangedSubviews: emojiLabels)
emojiBarStackView.axis = .horizontal
emojiBarStackView.spacing = Values.smallSpacing

@ -819,6 +819,16 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
presentAlert(alert)
}
func react(_ viewItem: ConversationViewItem, with emoji: String) {
print("Ryan Test: \(emoji)")
// TODO: send emoji react message
UserDefaults.standard.addNewRecentlyUsedEmoji(emoji)
}
func showFullEmojiKeyboard(_ viewItem: ConversationViewItem) {
// TODO: to be implemented
}
func contextMenuDismissed() {
recoverInputView()
}

@ -33,6 +33,10 @@ public enum SNUserDefaults {
public enum String : Swift.String {
case deviceToken
}
public enum Array : Swift.String {
case recentlyUsedEmojis
}
}
public extension UserDefaults {
@ -61,4 +65,29 @@ public extension UserDefaults {
get { return self.string(forKey: string.rawValue) }
set { set(newValue, forKey: string.rawValue) }
}
subscript(array: SNUserDefaults.Array) -> [String] {
get { return self.stringArray(forKey: array.rawValue) ?? []}
set { set(newValue, forKey: array.rawValue) }
}
func getRecentlyUsedEmojis() -> [String] {
let result = self[.recentlyUsedEmojis]
if result.isEmpty {
return ["🙈", "🙉", "🙊", "😈", "🥸", "🐀"]
}
return result
}
func addNewRecentlyUsedEmoji(_ emoji: String) {
var recentlyUsedEmojis = getRecentlyUsedEmojis()
if let index = recentlyUsedEmojis.firstIndex(of: emoji) {
recentlyUsedEmojis.remove(at: index)
}
if recentlyUsedEmojis.count >= 6 {
recentlyUsedEmojis.remove(at: 5)
}
recentlyUsedEmojis.insert(emoji, at: 0)
self[.recentlyUsedEmojis] = recentlyUsedEmojis
}
}

Loading…
Cancel
Save