85 lines
2.5 KiB
Swift
85 lines
2.5 KiB
Swift
//
|
|
// MoreTrendsFooterCollectionViewCell.swift
|
|
// Tusker
|
|
//
|
|
// Created by Shadowfacts on 2/9/23.
|
|
// Copyright © 2023 Shadowfacts. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class MoreTrendsFooterCollectionViewCell: UICollectionViewCell {
|
|
|
|
weak var delegate: TuskerNavigationDelegate?
|
|
|
|
private var button = UIButton()
|
|
|
|
private var kind: Kind!
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
button.addTarget(self, action: #selector(buttonPressed), for: .touchUpInside)
|
|
button.translatesAutoresizingMaskIntoConstraints = false
|
|
contentView.addSubview(button)
|
|
NSLayoutConstraint.activate([
|
|
button.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
|
|
button.topAnchor.constraint(equalTo: contentView.topAnchor),
|
|
button.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
|
|
])
|
|
}
|
|
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
func updateUI(_ kind: Kind) {
|
|
guard self.kind != kind else {
|
|
return
|
|
}
|
|
self.kind = kind
|
|
|
|
var config = UIButton.Configuration.plain()
|
|
var title: AttributedString
|
|
switch kind {
|
|
case .hashtags:
|
|
title = "More Trending Hashtags"
|
|
case .links:
|
|
title = "More Trending Links"
|
|
case .profileSuggestions:
|
|
title = "More Suggested Accounts"
|
|
}
|
|
title.font = .preferredFont(forTextStyle: .body).withTraits(.traitBold)!
|
|
config.attributedTitle = title
|
|
config.image = UIImage(systemName: "chevron.right")
|
|
config.imagePlacement = .trailing
|
|
config.buttonSize = .mini
|
|
button.configuration = config
|
|
}
|
|
|
|
@objc private func buttonPressed() {
|
|
guard let delegate else {
|
|
return
|
|
}
|
|
switch kind {
|
|
case nil:
|
|
return
|
|
case .hashtags:
|
|
delegate.show(TrendingHashtagsViewController(mastodonController: delegate.apiController))
|
|
case .links:
|
|
delegate.show(TrendingLinksViewController(mastodonController: delegate.apiController))
|
|
case .profileSuggestions:
|
|
delegate.show(SuggestedProfilesViewController(mastodonController: delegate.apiController))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension MoreTrendsFooterCollectionViewCell {
|
|
enum Kind {
|
|
case hashtags
|
|
case links
|
|
case profileSuggestions
|
|
}
|
|
}
|