Files
lockdown-iOS-mirror/LockdowniOS/CustomBlockedTableHeader.swift

112 lines
3.1 KiB
Swift

//
// CustomTableHeader.swift
// LockdownSandbox
//
// Created by Aliaksandr Dvoineu on 24.03.23.
//
import UIKit
enum Section: Int, CaseIterable, CustomStringConvertible {
case lists
case domains
var description: String {
switch self {
case .lists: return "Lists"
case .domains: return "Domains"
}
}
}
class CustomBlockedTableHeader: UITableViewHeaderFooterView {
static let id = "CustomBlockedTableHeader"
private(set) var addButtonCallback: () -> () = { }
private(set) var editButtonCallback: () -> () = { }
lazy var listsTitleLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.textAlignment = .center
label.font = fontBold18
return label
}()
lazy var addButton: UIButton = {
let button = UIButton(type: .system)
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 14, weight: .bold, scale: .large)
button.setImage(UIImage(systemName: "plus", withConfiguration: symbolConfig), for: .normal)
button.tintColor = .tunnelsBlue
button.addTarget(self, action: #selector(addButtonDidPress), for: .touchUpInside)
return button
}()
lazy var editButton: UIButton = {
let button = UIButton(type: .system)
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 14, weight: .bold, scale: .large)
button.setImage(UIImage(named: "icn_edit"), for: .normal)
button.tintColor = .tunnelsBlue
button.addTarget(self, action: #selector(editButtonDidPress), for: .touchUpInside)
button.isHidden = true
return button
}()
var category: Section = .lists {
didSet {
switch category {
case .lists:
listsTitleLabel.text = category.description
case .domains:
listsTitleLabel.text = category.description
}
}
}
override init(reuseIdentifier: String?) {
super.init(reuseIdentifier: reuseIdentifier)
configure()
}
func configure() {
contentView.addSubview(listsTitleLabel)
contentView.addSubview(addButton)
contentView.addSubview(editButton)
listsTitleLabel.anchors.leading.pin()
listsTitleLabel.anchors.bottom.marginsPin()
addButton.anchors.trailing.pin()
addButton.anchors.bottom.marginsPin()
editButton.anchors.trailing.spacing(12, to: addButton.anchors.leading)
editButton.anchors.bottom.marginsPin()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@discardableResult
func onAddButtonPressed(_ callback: @escaping () -> ()) -> Self {
addButtonCallback = callback
return self
}
@discardableResult
func onEditButtonPressed(_ callback: @escaping () -> ()) -> Self {
editButtonCallback = callback
return self
}
@objc func addButtonDidPress() {
addButtonCallback()
}
@objc func editButtonDidPress() {
editButtonCallback()
}
}