vendoo_v1.0/Vendoo/ItemTableViewController.swift
2016-11-29 08:17:43 -05:00

374 lines
17 KiB
Swift

//
// ItemTableViewController.swift
// Vendoo
//
// Created by Okechi Onyeje on 5/26/16.
// Copyright © 2016 Okechi Onyeje. All rights reserved.
//
/*
This class will be used to retrieve and manipulate data seen by the end user for he/she's item listings
*/
import UIKit
import TYMActivityIndicatorView
import SWRevealViewController
class ItemTableViewController: UIViewController {
//outlet
@IBOutlet weak var itemTable: UITableView!
@IBOutlet weak var tableSegmentController: UISegmentedControl!
@IBOutlet weak var menuButton: UIBarButtonItem!
var loadingView: UIView!
var selectedListing: Listing!
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
self.tabBarController?.tabBar.hidden = false
//set delegates
self.itemTable.dataSource = self
self.itemTable.delegate = self
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(stopIndicator), name: "finished_fetching_listings", object: nil)
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
(menuButton.target as! SWRevealViewController).delegate = self
menuButton.action = "revealToggle:"
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
}
self.loadingView = UIView(frame: self.view.frame)
self.loadingView.backgroundColor = UIColor.grayColor()
self.loadingView.alpha = 0.4
((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!.center = self.view.center
self.loadingView.addSubview(((self.tabBarController as? HomeViewController)?.firebaseManager.indicator)!)
self.view.addSubview(loadingView)
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.startAnimating()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
(menuButton.target as! SWRevealViewController).delegate = self
self.tabBarController?.tabBar.hidden = false
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func stopIndicator(){
(self.tabBarController as? HomeViewController)?.firebaseManager.indicator.stopAnimating()
self.loadingView.removeFromSuperview()
self.itemTable.reloadData()
}
/*
*/
}
// MARK: - IBAction
extension ItemTableViewController {
@IBAction func segSwitch(sender: UISegmentedControl) {
self.itemTable.reloadData()
}
}
// MARK: - Side Menu View
extension ItemTableViewController: SWRevealViewControllerDelegate {
func revealController(revealController: SWRevealViewController!, didMoveToPosition position: FrontViewPosition) {
if(position == FrontViewPosition.Left) {
for view in self.view.subviews {
view.userInteractionEnabled = true
}
self.tabBarController?.tabBar.userInteractionEnabled = true
} else {
for view in self.view.subviews {
if !view.isKindOfClass(UINavigationBar){
view.userInteractionEnabled = false
}
}
self.tabBarController?.tabBar.userInteractionEnabled = false
}
}
func revealController(revealController: SWRevealViewController!, willMoveToPosition position: FrontViewPosition) {
if(position == FrontViewPosition.Left) {
for view in self.view.subviews {
view.userInteractionEnabled = true
}
self.tabBarController?.tabBar.userInteractionEnabled = true
} else {
for view in self.view.subviews {
if !view.isKindOfClass(UINavigationBar){
view.userInteractionEnabled = false
}
}
self.tabBarController?.tabBar.userInteractionEnabled = false
}
}
}
// MARK: - Navigation
extension ItemTableViewController {
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
let des = segue.destinationViewController as! ListingPreviewViewController
var tempImages: [UIImageView] = []
for uiImage in self.selectedListing.images {
tempImages.append(UIImageView(image: uiImage))
}
let dict:[String:AnyObject] = [
"pictures": tempImages,
"title": self.selectedListing.title != nil ? self.selectedListing.title : "",
"description": self.selectedListing.desc != nil ? self.selectedListing.desc: "",
"price": self.selectedListing.price != nil ? self.selectedListing.price : "",
"category": self.selectedListing.category != nil ? self.selectedListing.category : "",
"quantity": self.selectedListing.quantity != nil ? self.selectedListing.quantity: nil
]
des.setDictionary(self.selectedListing.networks, itemdictionary: dict)
des.setManagers(
((self.tabBarController as? HomeViewController)?.fbGraphManager)!,
fireManager: ((self.tabBarController as? HomeViewController)?.firebaseManager)!,
ebayManager: ((self.tabBarController as? HomeViewController)?.ebayGraphManager)!,
etsyManager: ((self.tabBarController as? HomeViewController)?.etsyManager)!
)
if self.selectedListing.isDraft! {
des.setViewState("Editible")
}else {
des.setViewState("NonEditable")
}
}
}
// MARK: - TableView Datasource methods
extension ItemTableViewController: UITableViewDataSource{
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
if self.tableSegmentController.selectedSegmentIndex == 0 {
return ((self.tabBarController as? HomeViewController)?.userListings.count)!
}
else if tableSegmentController.selectedSegmentIndex == 1 {
return ((self.tabBarController as? HomeViewController)?.endedListings.count)!
}
else{
return ((self.tabBarController as? HomeViewController)?.soldListings.count)!
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: ItemCell! = (tableView.dequeueReusableCellWithIdentifier("Item Cell", forIndexPath: indexPath) as! ItemCell)
// Configure the cell...
//for each listing cell generated need to find the marketplaces it belongs to, the listing price, the name of the item, the status of the item, and the item image.
//Once these objects are retrieved, access the ItemCell properties and manipulate as needed
if self.tableSegmentController.selectedSegmentIndex == 0 {
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.userListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.userListings[indexPath.row].price
//check if item is published
if((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].isDraft!){
cell.itemStatus.text = "Status: Unpublished"
dispatch_async(dispatch_get_main_queue(), {
cell.alpha = 0.5
})
}else {
cell.itemStatus.text = "Status: Active"
}
if(!((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.userListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
else if tableSegmentController.selectedSegmentIndex == 1 {
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.endedListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].price
cell.itemStatus.text = "Status: Unsold"
if(!((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
else{
cell.itemImage.image = (self.tabBarController as? HomeViewController)?.soldListings[indexPath.row].images[0] //come back
cell.itemName.text = (self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].title
cell.itemPrice.text = (self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].price
cell.itemStatus.text = "Status: Sold"
if(!((self.tabBarController as? HomeViewController)!.soldListings[indexPath.row].networks["areNetworksChosen"])!){
cell.networks.hidden = true
}else{
cell.selectedNetworks = []
dispatch_async(dispatch_get_main_queue(), {
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["ebay"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0))?.hidden = true
cell.addNetwork("ebay_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["amazon"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 1, inSection: 0))?.hidden = true
cell.addNetwork("amazon_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["etsy"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 2, inSection: 0))?.hidden = true
cell.addNetwork("etsy_icon")
}
if(((self.tabBarController as? HomeViewController)!.endedListings[indexPath.row].networks["facebook"])!){
//cell.networks.cellForItemAtIndexPath(NSIndexPath(forRow: 3, inSection: 0))?.hidden = true
cell.addNetwork("facebook_icon")
}
cell.networks.reloadData()
})
}
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if self.tableSegmentController.selectedSegmentIndex == 0 {
self.selectedListing = (self.tabBarController as? HomeViewController)?.userListings[indexPath.row]
}
else if tableSegmentController.selectedSegmentIndex == 1 {
self.selectedListing = (self.tabBarController as? HomeViewController)?.endedListings[indexPath.row]
}
else{
self.selectedListing = (self.tabBarController as? HomeViewController)?.soldListings[indexPath.row]
}
self.performSegueWithIdentifier("ItemDetailSegue", sender: self)
}
}
//MARK: - Tableview Delegate Methods
extension ItemTableViewController: UITableViewDelegate {
/*
// Override to support conditional editing of the table view.
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
// Delete the row from the data source
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
} else if editingStyle == .Insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
}