// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved. import UIKit import SessionUIKit import SessionUtilitiesKit extension ContextMenuVC { final class EmojiReactsView: UIView { private let action: Action private let dismiss: () -> Void // MARK: - Settings private static let size: CGFloat = 40 // MARK: - Lifecycle init(for action: Action, dismiss: @escaping () -> Void) { self.action = action self.dismiss = dismiss super.init(frame: CGRect.zero) setUpViewHierarchy() } override init(frame: CGRect) { preconditionFailure("Use init(for:) instead.") } required init?(coder: NSCoder) { preconditionFailure("Use init(for:) instead.") } private func setUpViewHierarchy() { let emojiLabel = UILabel() emojiLabel.text = self.action.title emojiLabel.font = .systemFont(ofSize: Values.veryLargeFontSize) emojiLabel.set(.height, to: ContextMenuVC.EmojiReactsView.size) addSubview(emojiLabel) emojiLabel.pin(to: self) // Tap gesture recognizer let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) addGestureRecognizer(tapGestureRecognizer) } // MARK: - Interaction @objc private func handleTap() { action.work() dismiss() } } final class EmojiPlusButton: UIView { private let action: Action? private let dismiss: () -> Void // MARK: - Settings public static let size: CGFloat = 28 private let iconSize: CGFloat = 14 // MARK: - Lifecycle init(action: Action?, dismiss: @escaping () -> Void) { self.action = action self.dismiss = dismiss super.init(frame: CGRect.zero) setUpViewHierarchy() } override init(frame: CGRect) { preconditionFailure("Use init(for:) instead.") } required init?(coder: NSCoder) { preconditionFailure("Use init(for:) instead.") } private func setUpViewHierarchy() { // Icon image let iconImageView = UIImageView(image: #imageLiteral(resourceName: "ic_plus_24").withRenderingMode(.alwaysTemplate)) iconImageView.tintColor = Colors.text iconImageView.set(.width, to: iconSize) iconImageView.set(.height, to: iconSize) iconImageView.contentMode = .scaleAspectFit addSubview(iconImageView) iconImageView.center(in: self) // Background isUserInteractionEnabled = true backgroundColor = Colors.sessionEmojiPlusButtonBackground // Tap gesture recognizer let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap)) addGestureRecognizer(tapGestureRecognizer) } // MARK: - Interaction @objc private func handleTap() { dismiss() DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: { [weak self] in self?.action?.work() }) } } }