mastodon-app-ufficiale-ipho.../Mastodon/Scene/Profile/FollowedTags/FollowedTagsTableViewCell.s...

80 lines
2.7 KiB
Swift

//
// FollowedTagsTableViewCell.swift
// Mastodon
//
// Created by Marcus Kida on 24.11.22.
//
import UIKit
import MastodonSDK
final class FollowedTagsTableViewCell: UITableViewCell {
static let reuseIdentifier = "FollowedTagsTableViewCell"
private var hashtagView: HashtagTimelineHeaderView!
private let separatorLine = UIView.separatorLine
private var viewModel: FollowedTagsViewModel?
private var hashtag: Mastodon.Entity.Tag?
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setup()
}
required init?(coder: NSCoder) { fatalError("Not implemented") }
override func prepareForReuse() {
hashtagView.removeFromSuperview()
viewModel = nil
hashtagView = nil
super.prepareForReuse()
setup()
}
}
private extension FollowedTagsTableViewCell {
func setup() {
selectionStyle = .none
hashtagView = HashtagTimelineHeaderView()
hashtagView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(hashtagView)
contentView.backgroundColor = .clear
NSLayoutConstraint.activate([
hashtagView.heightAnchor.constraint(equalToConstant: 118).priority(.required),
hashtagView.topAnchor.constraint(equalTo: contentView.topAnchor),
hashtagView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
hashtagView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
hashtagView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
separatorLine.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(separatorLine)
NSLayoutConstraint.activate([
separatorLine.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
separatorLine.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
separatorLine.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
separatorLine.heightAnchor.constraint(equalToConstant: UIView.separatorLineHeight(of: contentView)),
])
hashtagView.onButtonTapped = { [weak self] in
guard let self = self, let tag = self.hashtag else { return }
self.viewModel?.followOrUnfollow(tag)
}
}
}
extension FollowedTagsTableViewCell {
func populate(with tag: Mastodon.Entity.Tag) {
self.hashtag = tag
hashtagView.update(HashtagTimelineHeaderView.Data.from(tag))
}
func setup(_ viewModel: FollowedTagsViewModel) {
self.viewModel = viewModel
}
}