92 lines
2.7 KiB
Swift
92 lines
2.7 KiB
Swift
//
|
|
// FollowedTagsViewController.swift
|
|
// Mastodon
|
|
//
|
|
// Created by Marcus Kida on 22.11.22.
|
|
//
|
|
|
|
import UIKit
|
|
import MastodonAsset
|
|
import MastodonCore
|
|
import MastodonUI
|
|
import MastodonLocalization
|
|
|
|
final class FollowedTagsViewController: UIViewController, NeedsDependency {
|
|
var context: AppContext!
|
|
var coordinator: SceneCoordinator!
|
|
let authContext: AuthContext
|
|
|
|
var viewModel: FollowedTagsViewModel
|
|
|
|
let titleView = DoubleTitleLabelNavigationBarTitleView()
|
|
let tableView: UITableView
|
|
let refreshControl: UIRefreshControl
|
|
|
|
init(appContext: AppContext, sceneCoordinator: SceneCoordinator, authContext: AuthContext, viewModel: FollowedTagsViewModel) {
|
|
self.context = appContext
|
|
self.coordinator = sceneCoordinator
|
|
self.authContext = authContext
|
|
self.viewModel = viewModel
|
|
|
|
refreshControl = UIRefreshControl()
|
|
|
|
tableView = UITableView()
|
|
tableView.register(FollowedTagsTableViewCell.self, forCellReuseIdentifier: FollowedTagsTableViewCell.reuseIdentifier)
|
|
tableView.translatesAutoresizingMaskIntoConstraints = false
|
|
tableView.rowHeight = UITableView.automaticDimension
|
|
tableView.separatorStyle = .none
|
|
tableView.backgroundColor = .clear
|
|
tableView.refreshControl = refreshControl
|
|
|
|
super.init(nibName: nil, bundle: nil)
|
|
|
|
title = L10n.Scene.FollowedTags.title
|
|
|
|
view.backgroundColor = .secondarySystemBackground
|
|
view.addSubview(tableView)
|
|
tableView.pinToParent()
|
|
tableView.delegate = self
|
|
|
|
refreshControl.addTarget(self, action: #selector(FollowedTagsViewController.refresh(_:)), for: .valueChanged)
|
|
}
|
|
|
|
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
viewModel.setupTableView(tableView)
|
|
}
|
|
|
|
//MARK: - Actions
|
|
|
|
@objc
|
|
func refresh(_ sender: UIRefreshControl) {
|
|
viewModel.fetchFollowedTags(completion: {
|
|
DispatchQueue.main.async {
|
|
self.refreshControl.endRefreshing()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
extension FollowedTagsViewController: UITableViewDelegate {
|
|
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
tableView.deselectRow(at: indexPath, animated: true)
|
|
|
|
let object = viewModel.followedTags[indexPath.row]
|
|
|
|
let hashtagTimelineViewModel = HashtagTimelineViewModel(
|
|
context: self.context,
|
|
authContext: self.authContext,
|
|
hashtag: object.name
|
|
)
|
|
|
|
_ = self.coordinator.present(
|
|
scene: .hashtagTimeline(viewModel: hashtagTimelineViewModel),
|
|
from: self,
|
|
transition: .show
|
|
)
|
|
|
|
}
|
|
}
|