|
|
//
// ForayTableViewController.swift
// foray
//
// Created by Nicholas Tay on 14/3/2022.
//
import UIKit
class ForayTableViewController: UITableViewController, ForayCoordinated {
var coordinator: ForayCoordinator?
// MARK: - Static data TEMP
var sections = [YearSection]()
// MARK: - On load
override func viewDidLoad() {
super.viewDidLoad()
self.title = "Foray"
tableView.rowHeight = UITableView.automaticDimension
// Register our custom cell
tableView.register(ForayNewTableViewCell.self, forCellReuseIdentifier: "ForayNewTableViewCell")
// Not sure if this is the right way to go about this...
coordinator?.showLoading()
reloadApiData()
self.refreshControl = UIRefreshControl()
self.refreshControl?.addTarget(self, action: #selector(doRefresh), for: UIControl.Event.valueChanged)
}
@objc func doRefresh(sender: AnyObject) {
reloadApiData()
}
func reloadApiData() {
ForayNetworkManager.shared.get(
url: "https://users.windblume.net/~nick/upload/dummy.json",
onComplete: { (apiItems: [PenguinItem]) in
var items = apiItems
// Show items in chronological order within sections
items.sort { (lhs, rhs) in lhs.releaseDate < rhs.releaseDate }
// Group by year sections
let groups = Dictionary(grouping: apiItems) { (item) in
return Calendar.current.component(.year, from: item.releaseDate)
}
self.sections = groups.map { (key, values) in
return YearSection(year: key, items: values)
}
// Sort the sections from oldest year to newest
self.sections.sort { (lhs, rhs) in lhs.year < rhs.year }
self.tableView.reloadData()
self.refreshControl?.endRefreshing()
self.coordinator?.hideLoading()
})
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// Returns number of sections for table
return self.sections.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Returns number of rows for table's section
return self.sections[section].items.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = self.sections[indexPath.section].items[indexPath.row]
let type: String
let icon: UIImage
switch item.type {
case .item:
type = "Item"
icon = UIImage(named: item.id)!
case .quest:
type = "Quest"
icon = UIImage(named: "spy")!
}
let cell: ForayNewTableViewCell = tableView.dequeueReusableCell(withIdentifier: "ForayNewTableViewCell", for: indexPath) as! ForayNewTableViewCell
cell.setData(name: item.name, desc: type + "ID: " + item.id, img: icon)
return cell
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return "Released in \(self.sections[section].year)"
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let item = self.sections[indexPath.section].items[indexPath.row]
self.coordinator?.showDetails(item: item)
}
}
|