wrap up message info
This commit is contained in:
parent
f185ccf506
commit
890d822a2b
|
@ -10,6 +10,7 @@ extension ContextMenuVC {
|
|||
let isEmojiAction: Bool
|
||||
let isEmojiPlus: Bool
|
||||
let isDismissAction: Bool
|
||||
let shouldDismissAfterAction: Bool
|
||||
let accessibilityLabel: String?
|
||||
let work: () -> Void
|
||||
|
||||
|
@ -21,6 +22,7 @@ extension ContextMenuVC {
|
|||
isEmojiAction: Bool = false,
|
||||
isEmojiPlus: Bool = false,
|
||||
isDismissAction: Bool = false,
|
||||
shouldDismissAfterAction: Bool = true,
|
||||
accessibilityLabel: String? = nil,
|
||||
work: @escaping () -> Void
|
||||
) {
|
||||
|
@ -29,6 +31,7 @@ extension ContextMenuVC {
|
|||
self.isEmojiAction = isEmojiAction
|
||||
self.isEmojiPlus = isEmojiPlus
|
||||
self.isDismissAction = isDismissAction
|
||||
self.shouldDismissAfterAction = shouldDismissAfterAction
|
||||
self.accessibilityLabel = accessibilityLabel
|
||||
self.work = work
|
||||
}
|
||||
|
@ -39,6 +42,7 @@ extension ContextMenuVC {
|
|||
return Action(
|
||||
icon: UIImage(named: "ic_info"),
|
||||
title: "context_menu_info".localized(),
|
||||
shouldDismissAfterAction: false,
|
||||
accessibilityLabel: "Message info"
|
||||
) { delegate?.info(cellViewModel) }
|
||||
}
|
||||
|
|
|
@ -9,9 +9,25 @@ extension ContextMenuVC {
|
|||
private static let cornerRadius: CGFloat = 8
|
||||
|
||||
private let cellViewModel: MessageViewModel
|
||||
private let dismissAction: () -> Void
|
||||
|
||||
// MARK: - UI
|
||||
|
||||
private lazy var dismissButton: UIButton = {
|
||||
let result: UIButton = UIButton(type: .custom)
|
||||
result.setImage(
|
||||
UIImage(named: "small_chevron_left")?
|
||||
.withRenderingMode(.alwaysTemplate),
|
||||
for: .normal
|
||||
)
|
||||
result.addTarget(self, action: #selector(dismiss), for: UIControl.Event.touchUpInside)
|
||||
result.themeTintColor = .white
|
||||
result.set(.width, to: 20)
|
||||
result.set(.height, to: 20)
|
||||
|
||||
return result
|
||||
}()
|
||||
|
||||
private lazy var messageSentDateLabel: UILabel = {
|
||||
let result: UILabel = UILabel()
|
||||
result.font = .systemFont(ofSize: Values.smallFontSize)
|
||||
|
@ -58,8 +74,9 @@ extension ContextMenuVC {
|
|||
|
||||
// MARK: - Lifecycle
|
||||
|
||||
init(cellViewModel: MessageViewModel) {
|
||||
init(cellViewModel: MessageViewModel, dismissAction: @escaping () -> Void) {
|
||||
self.cellViewModel = cellViewModel
|
||||
self.dismissAction = dismissAction
|
||||
|
||||
super.init(frame: CGRect.zero)
|
||||
self.accessibilityLabel = "Message info"
|
||||
|
@ -67,20 +84,25 @@ extension ContextMenuVC {
|
|||
}
|
||||
|
||||
override init(frame: CGRect) {
|
||||
preconditionFailure("Use init(cellViewModel:) instead.")
|
||||
preconditionFailure("Use init(cellViewModel:dismiss:) instead.")
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
preconditionFailure("Use init(cellViewModel:) instead.")
|
||||
preconditionFailure("Use init(cellViewModel:dismiss:) instead.")
|
||||
}
|
||||
|
||||
private func setUpViewHierarchy() {
|
||||
addSubview(dismissButton)
|
||||
dismissButton.pin(.top, to: .top, of: self, withInset: Values.smallSpacing)
|
||||
dismissButton.pin(.leading, to: .leading, of: self)
|
||||
|
||||
let backgroundView: UIView = UIView()
|
||||
backgroundView.clipsToBounds = true
|
||||
backgroundView.themeBackgroundColor = .contextMenu_background
|
||||
backgroundView.layer.cornerRadius = Self.cornerRadius
|
||||
addSubview(backgroundView)
|
||||
backgroundView.pin(to: self)
|
||||
backgroundView.pin([ UIView.HorizontalEdge.trailing, UIView.VerticalEdge.top, UIView.VerticalEdge.bottom ], to: self)
|
||||
backgroundView.pin(.leading, to: .trailing, of: dismissButton)
|
||||
|
||||
let stackView: UIStackView = UIStackView()
|
||||
stackView.axis = .vertical
|
||||
|
@ -130,5 +152,11 @@ extension ContextMenuVC {
|
|||
stackView.addArrangedSubview(profileContainerView)
|
||||
|
||||
}
|
||||
|
||||
// MARK: - Interaction
|
||||
|
||||
@objc private func dismiss() {
|
||||
dismissAction()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,13 +60,13 @@ final class ContextMenuVC: UIViewController {
|
|||
}()
|
||||
|
||||
private lazy var messageInfoView: MessageInfoView = {
|
||||
let result: MessageInfoView = MessageInfoView(cellViewModel: self.cellViewModel)
|
||||
let result: MessageInfoView = MessageInfoView(cellViewModel: self.cellViewModel, dismissAction: hideMessageInfo)
|
||||
result.themeShadowColor = .black
|
||||
result.layer.shadowOffset = CGSize.zero
|
||||
result.layer.shadowOpacity = 0.4
|
||||
result.layer.shadowRadius = 4
|
||||
result.alpha = 0
|
||||
result.set(.width, to: 320)
|
||||
result.set(.width, to: 340)
|
||||
|
||||
return result
|
||||
}()
|
||||
|
@ -176,7 +176,12 @@ final class ContextMenuVC: UIViewController {
|
|||
let menuStackView = UIStackView(
|
||||
arrangedSubviews: actions
|
||||
.filter { !$0.isEmojiAction && !$0.isEmojiPlus && !$0.isDismissAction }
|
||||
.map { action -> ActionView in ActionView(for: action, dismiss: snDismiss) }
|
||||
.map { action -> ActionView in
|
||||
ActionView(
|
||||
for: action,
|
||||
dismiss: action.shouldDismissAfterAction ? snDismiss : {}
|
||||
)
|
||||
}
|
||||
)
|
||||
menuStackView.axis = .vertical
|
||||
menuBackgroundView.addSubview(menuStackView)
|
||||
|
@ -273,7 +278,6 @@ final class ContextMenuVC: UIViewController {
|
|||
UIView.animate(withDuration: 0.2) { [weak self] in
|
||||
self?.emojiBar.alpha = 1
|
||||
self?.menuView.alpha = 1
|
||||
self?.messageInfoView.alpha = 1
|
||||
self?.timestampLabel.alpha = 1
|
||||
self?.fallbackTimestampLabel.alpha = 1
|
||||
}
|
||||
|
@ -360,6 +364,22 @@ final class ContextMenuVC: UIViewController {
|
|||
|
||||
// MARK: - Interaction
|
||||
|
||||
func showMessageInfo() {
|
||||
UIView.animate(withDuration: 0.2) { [weak self] in
|
||||
self?.emojiBar.alpha = 0
|
||||
self?.menuView.alpha = 0
|
||||
self?.messageInfoView.alpha = 1
|
||||
}
|
||||
}
|
||||
|
||||
func hideMessageInfo() {
|
||||
UIView.animate(withDuration: 0.2) { [weak self] in
|
||||
self?.emojiBar.alpha = 1
|
||||
self?.menuView.alpha = 1
|
||||
self?.messageInfoView.alpha = 0
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func handleTap() {
|
||||
snDismiss()
|
||||
}
|
||||
|
|
|
@ -1558,7 +1558,8 @@ extension ConversationVC:
|
|||
// MARK: - ContextMenuActionDelegate
|
||||
|
||||
func info(_ cellViewModel: MessageViewModel) {
|
||||
|
||||
guard let contextMenuVC = self.contextMenuVC else { return }
|
||||
contextMenuVC.showMessageInfo()
|
||||
}
|
||||
|
||||
func reply(_ cellViewModel: MessageViewModel) {
|
||||
|
|
Loading…
Reference in New Issue