Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // ProfileViewController.swift
- // Evenz
- //
- // Created by Дмитрий Дурицкий on 7/6/19.
- // Copyright © 2019 Evenz. All rights reserved.
- //
- import UIKit
- class ProfileViewController: BaseViewController, UITableViewDelegate, UITableViewDataSource {
- @IBOutlet weak var imageView: UIImageView!
- @IBOutlet weak var tableView: UITableView!
- @IBOutlet weak var fullNameLabel: UILabel!
- @IBOutlet weak var suggestionsButton: UIButton!
- @IBOutlet weak var sugesstionsView: UIView!
- @IBOutlet weak var likedButton: UIButton!
- @IBOutlet weak var likedView: UIView!
- @IBOutlet weak var saveButton: UIButton!
- @IBOutlet weak var saveView: UIView!
- @IBOutlet weak var ticketsButton: UIButton!
- @IBOutlet weak var ticketsView: UIView!
- @IBOutlet weak var pastButton: UIButton!
- @IBOutlet weak var pastView: UIView!
- @IBOutlet weak var commingSoonView: UIView!
- @IBOutlet weak var imageOfCommingSoon: UIImageView!
- @IBOutlet weak var infoLabel: UILabel!
- var events = [Event]()
- var accountController = appDelegate().appScope.accountController
- var user = User()
- var dataSource = ProfileDataSource()
- let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge)
- var refreshToken = false
- override func viewDidLoad() {
- super.viewDidLoad()
- }
- //MARK: Appearance methods
- private func configureUserNavigationBar() {
- let rightButton = UIBarButtonItem(title: "ACCOUNT", style: .plain, target: self, action: #selector(showUserProfile))
- let font = UIFont(name: BoldTextFont, size: 11.0)
- rightButton.setTitleTextAttributes([NSAttributedStringKey.font: font!], for: .normal)
- navigationItem.rightBarButtonItem = rightButton
- }
- @objc func showUserProfile() {
- let accountViewController = AccountViewController()
- accountViewController.accountController = appDelegate().appScope.accountController
- accountViewController.locationController = appDelegate().appScope.locationController
- accountViewController.screensController = appDelegate().appScope.screensController
- navigationController?.pushViewController(accountViewController, animated: true)
- }
- override func viewWillAppear(_ animated: Bool) {
- imageView.layer.cornerRadius = imageView.frame.width/2
- imageView.layer.shadowColor = UIColor.black.cgColor
- imageView.layer.shadowOpacity = 1
- imageView.layer.shadowOffset = .zero
- imageView.layer.shadowRadius = 10
- tableView.delegate = self
- tableView.dataSource = self
- tableView.separatorStyle = .none
- tableView.register(UINib(nibName: "SearchResultCell", bundle: nil), forCellReuseIdentifier: "SearchResultCell")
- configureUserNavigationBar()
- suggestionsButton.titleLabel?.font = UIFont.scaleFontAccordingToDeviceSize(font: (suggestionsButton.titleLabel?.font)!)
- likedButton.titleLabel?.font = UIFont.scaleFontAccordingToDeviceSize(font: (likedButton.titleLabel?.font)!)
- saveButton.titleLabel?.font = UIFont.scaleFontAccordingToDeviceSize(font: (saveButton.titleLabel?.font)!)
- ticketsButton.titleLabel?.font = UIFont.scaleFontAccordingToDeviceSize(font: (ticketsButton.titleLabel?.font)!)
- pastButton.titleLabel?.font = UIFont.scaleFontAccordingToDeviceSize(font: (pastButton.titleLabel?.font)!)
- fullNameLabel.font = UIFont.scaleFontAccordingToDeviceSize(font: (fullNameLabel.font)!)
- activityIndicator.color = ColorManager.appRedColor()
- tableView.addSubview(activityIndicator)
- activityIndicator.center = tableView.center
- setupTitleViewWithText(text: "My Events")
- user = accountController.loadUser()!
- fullNameLabel.text = "\(user.firstName!) \(user.secondName!)"
- imageView.setImage(with: URL(string: user.imageString!))
- if likedView.backgroundColor == .red {
- loadLikedEvents()
- } else if saveView.backgroundColor == .red {
- loadSavedEvents()
- }
- }
- func changeButtonColor(button: UIButton, selectedView: UIView) {
- suggestionsButton.setTitleColor(.black, for: .normal)
- likedButton.setTitleColor(.black, for: .normal)
- saveButton.setTitleColor(.black, for: .normal)
- ticketsButton.setTitleColor(.black, for: .normal)
- pastButton.setTitleColor(.black, for: .normal)
- sugesstionsView.backgroundColor = .white
- likedView.backgroundColor = .white
- saveView.backgroundColor = .white
- ticketsView.backgroundColor = .white
- pastView.backgroundColor = .white
- selectedView.backgroundColor = .red
- button.setTitleColor(.red, for: .normal)
- }
- func clearTable() {
- events.removeAll()
- tableView.reloadData()
- }
- //MARK: Actions
- @IBAction func suggestionsAction(_ sender: Any) {
- clearTable()
- changeButtonColor(button: suggestionsButton, selectedView: sugesstionsView)
- commingSoonView.alpha = 1
- emptyState()
- }
- @IBAction func likedAction(_ sender: Any) {
- commingSoonView.alpha = 0
- activityIndicator.startAnimating()
- clearTable()
- changeButtonColor(button: likedButton, selectedView: likedView)
- loadLikedEvents()
- }
- func loadLikedEvents() {
- let request = LoadLikedRequest(pages: 0)
- request.resumeWithCompletionClosure { response in
- if response.errorInToken != nil {
- response.refreshAccessToken(dictionary: response.responseDictionary!, complition: {
- self.refreshToken = true
- self.update()
- })
- } else {
- self.refreshToken = false
- self.events = response.events
- self.emptyState()
- self.tableView.reloadData()
- self.activityIndicator.stopAnimating()
- }
- }
- }
- func update() {
- if refreshToken {
- if likedView.backgroundColor == .red {
- loadLikedEvents()
- } else if saveView.backgroundColor == .red {
- loadSavedEvents()
- }
- }
- }
- func loadSavedEvents() {
- let request = LoadSavedRequest(pages: 0)
- request.resumeWithCompletionClosure { response in
- if response.errorInToken != nil {
- response.refreshAccessToken(dictionary: response.responseDictionary!, complition: {
- self.refreshToken = true
- self.update()
- })
- } else {
- self.refreshToken = false
- self.events = response.events
- self.emptyState()
- self.tableView.reloadData()
- self.activityIndicator.stopAnimating()
- }
- }
- }
- @IBAction func savedAction(_ sender: Any) {
- commingSoonView.alpha = 0
- activityIndicator.startAnimating()
- clearTable()
- changeButtonColor(button: saveButton, selectedView: saveView)
- loadSavedEvents()
- }
- @IBAction func ticketsAction(_ sender: Any) {
- clearTable()
- changeButtonColor(button: ticketsButton, selectedView: ticketsView)
- commingSoonView.alpha = 1
- emptyState()
- }
- @IBAction func pastsAction(_ sender: Any) {
- clearTable()
- changeButtonColor(button: pastButton, selectedView: pastView)
- commingSoonView.alpha = 1
- emptyState()
- }
- func emptyState() {
- if events.isEmpty {
- UIView.animate(withDuration: 0.4) {
- self.commingSoonView.alpha = 1
- self.imageOfCommingSoon.image = UIImage(named: "Empty State")
- if self.likedView.backgroundColor == .red {
- self.infoLabel.text = "You have no liked events :( Like any event on event list you wish"
- } else if self.saveView.backgroundColor == .red {
- self.infoLabel.text = "You have no saved events :( Save any event on event list you wish"
- } else {
- self.imageOfCommingSoon.image = UIImage(named: "emptyState1")
- self.infoLabel.text = "Comming soon..."
- }
- }
- } else {
- commingSoonView.alpha = 0
- }
- }
- //MARK: Delegates methods
- func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
- return CGFloat.scaleAccordingToDeviceSize(maximumSize: 60)
- }
- func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- let event = events[indexPath.row]
- let mainStoryboard = UIStoryboard(name: "Details", bundle: nil)
- if let eventDetailsViewController = mainStoryboard.instantiateViewController(withIdentifier: "EventDetailsViewController") as? EventDetailsViewController {
- eventDetailsViewController.getEventDetails(id: event.id!)
- let transition = CATransition()
- transition.duration = 0.3
- transition.type = kCATransitionPush
- transition.subtype = kCATransitionFromRight
- transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
- view.window!.layer.add(transition, forKey: kCATransition)
- present(eventDetailsViewController, animated: false)
- }
- }
- func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return events.count
- }
- func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: "SearchResultCell", for: indexPath) as! SearchResultCell
- let event = events[indexPath.row]
- cell.mainTextLabel.text = event.title
- cell.subLabel.text = event.startDateString
- return cell
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement