Vasile
Vasile

Reputation: 79

How to add data into Firestore Swift by tapping on a cell

I have more restaurants , each have diferent food.Look here This is how im retrieving data from the Firestore. In the previous controller I have a list of restaurants, each contains a list food.

struct Food {
    
    var photoKeyRestaurant: String
    var foodName: String
    var foodDescription: String
    var restaurantName: String
    var priceFood: Int
    
}

class RestaurantViewController: UIViewController {
    
   
    var restaurantName: String!
    var food: [Food] = []
  
    
    
    private let tableView: UITableView = {
        let table = UITableView()

        return table
    }()

func getDatabaseRecords() {
        
       
            
            let db = Firestore.firestore()
           //  Empty the array
          food = []
            
        db.collection("RestaurantViewController").whereField("restaurantName", isEqualTo: restaurantName).getDocuments { (snapshot, error) in
                if let error = error {
                    print(error)
                    return
                } else {
                    for document in snapshot!.documents {
                        let data = document.data()
                        let newEntry = Food(photoKeyRestaurant: data["photoKeyRestaurant"] as! String, foodName: data["foodName"] as! String, foodDescription: data["foodDescription"] as! String, restaurantName: data["restaurantName"] as! String , priceFood: data["priceLabel"] as! Int
                        )
                        
                            
                            
                            
                        self.food.append(newEntry)
                    }
                }
                DispatchQueue.main.async {
                 //  self.datas = self.filteredData
                   self.tableView.reloadData()
                }
            }
        }

How can I add the data of the selected cell by pressing on + to Firestore in this function ? I'vrea create a protocol in my FoodTableViewCell , and I've called it in the RestaurantViewController.

 func diddTapButtonCell(_ cell: FoodTableViewCell) {
    
        let db = Firestore.firestore()
        db.collection("cart").addDocument.(data: foodName) { (err) in
            
        } 

Edited: Added Table view

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return food.count
      
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "FoodTableViewCell", for: indexPath) as! FoodTableViewCell
        cell.delegate = self
        let mancare = food[indexPath.row]
        let storageRef = Storage.storage().reference()
        let photoRef = storageRef.child(mancare.photoKeyRestaurant)
        cell.foodImage.sd_setImage(with: photoRef)
        cell.descriptionLabel.text = mancare.foodDescription
        cell.foodNameLabel.text = mancare.foodName
        cell.priceLabel.text = "\(mancare.priceFood) lei"
        //Fac ca imaginea sa fie cerc  - start
        
        cell.foodImage.layer.borderWidth = 1
        cell.foodImage.layer.masksToBounds = false
        cell.foodImage.layer.borderColor = UIColor.black.cgColor
        cell.foodImage.layer.cornerRadius = cell.foodImage.frame.height/2
        cell.foodImage.clipsToBounds = true
     
        //Fac ca imaginea sa fie cerc  - finish
        return cell
    }
    

This is my tableview cell code


protocol CustomCellDelegate {
    func diddTapButtonCell (_ cell: FoodTableViewCell)
}
class FoodTableViewCell: UITableViewCell {
    
    var delegate: CustomCellDelegate?
   
    @IBOutlet weak var foodImage: UIImageView!
    
    @IBOutlet weak var foodNameLabel: UILabel!
    
    @IBOutlet weak var descriptionLabel: UILabel!
    
    @IBOutlet weak var priceLabel: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        
    }
    
    
    
    @IBAction func addToCart(_ sender: Any) {
        delegate?.diddTapButtonCell(self)
    }
    
    
    
}

Upvotes: 0

Views: 261

Answers (1)

landnbloc
landnbloc

Reputation: 1068

https://firebase.google.com/docs/firestore/manage-data/add-data
And here is an example from one of my projects for adding data to firestore.

 func updateDocument(rootCollection : String, doc: String, newValueDict: [String : Any], completion:@escaping (Bool) -> Void = {_ in }) {
                
                 let db = Firestore.firestore()
                db.collection(rootCollection).document(doc).setData(newValueDict, merge: true){ err in
                    if let err = err {
                        print("Error writing document: \(err)")
                        completion(false)
                        
                    }else{
                        
                        completion(true)
                      
                       
                    }
                }
                 
             }

Upvotes: 1

Related Questions