import UIKit import Shared import Combine final class ChatListMenuView: UIToolbar { enum Action { case delete case deleteAll } let stackView = UIStackView() let deleteButton = UIButton() let deleteAllButton = UIButton() @Published var isDeleteEnabled = false var publisher: AnyPublisher<Action, Never> { actionRelay.eraseToAnyPublisher() } private var cancellables = Set<AnyCancellable>() private let actionRelay = PassthroughSubject<Action, Never>() init() { super.init(frame: .zero) setup() } required init?(coder: NSCoder) { nil } private func setup() { clipsToBounds = true layer.cornerRadius = 15 barTintColor = Asset.neutralSecondary.color deleteButton.setImage(Asset.chatListMenuDelete.image, for: .normal) deleteAllButton.setTitleColor(Asset.accentDanger.color, for: .normal) deleteAllButton.setTitle(Localized.ChatList.Menu.deleteAll, for: .normal) deleteAllButton.titleLabel?.font = Fonts.Mulish.semiBold.font(size: 14.0) stackView.spacing = 35 stackView.addArrangedSubview(deleteButton) stackView.addArrangedSubview(deleteAllButton) stackView.distribution = .fillEqually addSubview(stackView) translatesAutoresizingMaskIntoConstraints = false $isDeleteEnabled .assign(to: \.isEnabled, on: deleteButton) .store(in: &cancellables) deleteButton.publisher(for: .touchUpInside) .sink { [weak actionRelay] in actionRelay?.send(.delete) } .store(in: &cancellables) deleteAllButton.publisher(for: .touchUpInside) .sink { [weak actionRelay] in actionRelay?.send(.deleteAll) } .store(in: &cancellables) stackView.snp.makeConstraints { make in make.top.equalToSuperview() make.left.equalToSuperview().offset(24) make.right.equalToSuperview().offset(-24) make.bottom.equalToSuperview().offset(-10) make.height.equalTo(83) } } }