Files
eqn.ios/Sources/Earthquake Network/ViewController/Menu/MenuViewController.swift
T
Andrea Busi 0f46587456 refactor: Recreate Menu controller in Swift and use updated website address
- Remove old controller
- Create cell classes for menu cells
- Update website url with new one
2020-07-27 21:39:53 +02:00

118 lines
4.0 KiB
Swift

//
// MenuViewController.swift
// Earthquake Network
//
// Created by Busi Andrea on 27/07/2020.
// Copyright © 2020 Earthquake Network. All rights reserved.
//
import UIKit
import SafariServices
class MenuViewController: UITableViewController {
enum MenuItem: CaseIterable {
case header
case settings
case informations
case faq
case disclaimer
case author
case privacy
var title: String {
switch self {
case .header: return ""
case .settings: return NSLocalizedString("Impostazioni", comment: "voce menu")
case .informations: return NSLocalizedString("Informazioni", comment: "voce menu")
case .faq: return NSLocalizedString("F.A.Q.", comment: "voce menu")
case .disclaimer: return NSLocalizedString("Disclaimer", comment: "voce menu")
case .author: return NSLocalizedString("Autore", comment: "voce menu")
case .privacy: return NSLocalizedString("Privacy", comment: "voce menu")
}
}
var icon: String? {
switch self {
case .header: return nil
case .settings: return "ic_settings_black_24dp"
case .informations: return "ic_info_outline_black_24dp"
case .faq: return "ic_help_outline_black_24dp"
case .disclaimer: return "ic_star_border_black_24dp"
case .author: return "ic_verified_user_black_24dp"
case .privacy: return "ic_person_black_24dp"
}
}
}
private let items = MenuItem.allCases
private static let CellIdentifierHeader = "HeaderCell"
private static let CellIdentifierItem = "MenuItemCell"
// MARK: - View Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
}
// MARK: - Table view data source
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
items.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let item = items[indexPath.row]
if item == .header {
return 160
}
return 60
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let item = items[indexPath.row]
if item == .header {
let cell = tableView.dequeueReusableCell(withIdentifier: Self.CellIdentifierHeader, for: indexPath) as! MenuHeaderTableViewCell
cell.updateUI()
return cell
}
let cell = tableView.dequeueReusableCell(withIdentifier: Self.CellIdentifierItem, for: indexPath) as! MenuItemTableViewCell
cell.item = item
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.revealViewController()?.revealToggle(animated: true)
let item = items[indexPath.row]
switch item {
case .header:
break
case .settings:
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NOTIFICHE_SISMI), object: nil)
default:
// open url if available
if let url = externalUrl(for: item) {
let controller = SFSafariViewController(url: url)
present(controller, animated: true, completion: nil)
}
}
}
// MARK: - Private
private func externalUrl(for item: MenuItem) -> URL? {
let baseUrl = EQNWebsiteAddress
switch item {
case .informations: return URL(string: "\(baseUrl)")
case .faq: return URL(string: "\(baseUrl)/f-a-q/")
case .disclaimer: return URL(string: "\(baseUrl)/terms-conditions/")
case .author: return URL(string: "\(baseUrl)/contact/")
case .privacy: return URL(string: "\(baseUrl)/privacy/")
default: return nil
}
}
}