aboutsummaryrefslogblamecommitdiff
path: root/foray/ForayTableViewController.swift
blob: dc3261157341042681b755784aaa519f6cd8c487 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                         




               
               
                      
                         



                    




                       





                                                  












                                                                 




                                                       







                                                                                                                   

     
















                                                                 



                                                                      
                                  


                                                                                                  

                                                     


                                                                                                             
                                                                        








                                                                                                                         
                                           
                                                      




                                                                                                        



                                                                        

     
//
//  ForayTableViewController.swift
//  foray
//
//  Created by Nicholas Tay on 14/3/2022.
//

import UIKit

enum ItemType {
    case item
    case quest
}

struct MyItem {
    var type: ItemType
    var releaseDate: Date
    var id: String
    var name: String
}

struct YearSection {
    var year: Date
    var items: [MyItem]
}

class ForayTableViewCell: UITableViewCell {
    @IBOutlet weak var cellItemName: UILabel!
    @IBOutlet weak var cellItemSubtitle: UILabel!
    @IBOutlet weak var cellItemImage: UIImageView!
}

// copied from sample project
private func parseDate(_ str : String) -> Date {
    let dateFormat = DateFormatter()
    dateFormat.dateFormat = "yyyy-MM-dd"
    return dateFormat.date(from: str)!
}

private func firstDayOfYear(date: Date) -> Date {
    let calendar = Calendar.current
    let components = calendar.dateComponents([.year], from: date)
    return calendar.date(from: components)!
}

class ForayTableViewController: UITableViewController {
    
    // MARK: - Static data TEMP
    
    let items = [
        MyItem(type: .item, releaseDate: parseDate("2006-05-26"), id: "mh", name: "Miners Helmet"),
        MyItem(type: .item, releaseDate: parseDate("2010-05-01"), id: "it", name: "Inner Tube"),
        MyItem(type: .item, releaseDate: parseDate("2009-04-24"), id: "tbg", name: "Toboggan"),
        MyItem(type: .item, releaseDate: parseDate("2006-03-29"), id: "spy", name: "Spy Phone"),
        MyItem(type: .item, releaseDate: parseDate("2008-11-18"), id: "bnb", name: "Black Ninja Belt"),
        MyItem(type: .quest, releaseDate: parseDate("2006-05-23"), id: "cmp", name: "Case of the Missing Puffles"),
        MyItem(type: .quest, releaseDate: parseDate("2009-11-16"), id: "gsm", name: "G's Secret Mission"),
        MyItem(type: .quest, releaseDate: parseDate("2009-04-18"), id: "cmc", name: "Case of the Missing Coins"),
    ]
    
    var sections = [YearSection]()
    
    // MARK: - On load
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let groups = Dictionary(grouping: self.items) { (item) in
            return firstDayOfYear(date: 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 }
    }
    
    // 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 cell: ForayTableViewCell
        switch item.type {
        case .item:
            cell = tableView.dequeueReusableCell(withIdentifier: "ForayCell", for: indexPath) as! ForayTableViewCell
            cell.cellItemImage?.image = UIImage(named: item.id)
        case .quest:
            cell = tableView.dequeueReusableCell(withIdentifier: "ForayQuestCell", for: indexPath) as! ForayTableViewCell
        }
        
        cell.cellItemName?.text = item.name
        cell.cellItemSubtitle?.text = "ID: " + item.id

        return cell
    }
    
    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        let section = self.sections[section]
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy"
        return "Released in " + dateFormatter.string(from: section.year)
    }
}