edey
edey

Reputation: 159

Remove value when listing firebase child node on tableViewCell

I am trying to list all the users from a firebase node in a table view (this is working) but would then like to remove the current user from the list (this is not working).

I've tried to use removeValue() but it still ran with the current user on the table view - also I don't want to remove the user from firebase

I then tried to make it run only if the the user autoId is not equal to the current users Id but it still shows up on the table view cell

Would appreciate any help :)

My firebase structure is like this:

"users" : {
   "8x1SGi2P0KVOKm4i60JQLP1bdU63" : {
     "fullname" : "bbbb",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2F8x1SGi2P0KVOKm4i60JQLP1bdU63?alt=media&token=7932b14f-c2d8-46fd-9dd1-c607217fe8d3",
   },
   "B7rwHiCTlphZjKXfPSEzkIwl8RH2" : {
     "fullname" : "Aaaa ",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FB7rwHiCTlphZjKXfPSEzkIwl8RH2?alt=media&token=072e1f41-935e-430d-af99-dc640381f8e6",
   },
   "FRuuk20CHrhNlYIBmgN4TTz3Cxn1" : {
     "fullname" : "eeee",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FFRuuk20CHrhNlYIBmgN4TTz3Cxn1?alt=media&token=bf89b903-a51a-4d6d-bdef-fe2667d78842",
   },

Code to which lists users:

func observeUsers(completion: @escaping (UserModel) -> Void) {
    REF_USERS.observeSingleEvent(of: .childAdded, with: { snapshot in
        if let dict = snapshot.value as? [String: Any] {
            let user = UserModel.transformUser(dict: dict, key: snapshot.key)

            //line below used first to remove value from listing on table view
            //Api.User.REF_USERS.child("users").child(Api.User.CURRENT_USER!.uid).removeValue()

            //line below - if user autoID is not equal to the current user then list
            if user.id != Api.User.CURRENT_USER?.uid {
                completion(user)
            }
        }
    })
}

EDIT:

func loadUsers() {

    var allUsers = [String]()

    Api.User.REF_USERS.observe(.value, with: { snapshot in
        for child in snapshot.children { //build the array of keys
            let snap = child as! DataSnapshot
            let key = snap.key
            allUsers.append(key)
            print(allUsers)
        }
    })
}

Upvotes: 0

Views: 51

Answers (2)

Abu Ul Hassan
Abu Ul Hassan

Reputation: 1396

You can control this in you loadUsers by adding userId check like below

func loadUsers() {
var allUsers = [String]()
Api.User.REF_USERS.observe(.value, with: { snapshot in
    for child in snapshot.children { //build the array of keys
        let snap = child as! DataSnapshot
        let key = snap.key
if key != currentUser.id{
        allUsers.append(key)
}
        print(allUsers)
    }
})
}

Upvotes: 1

Mohammad Yunus
Mohammad Yunus

Reputation: 214

instead of removing try this create model of your tabledata then create an empty array of it while fetching the data append all except that which has same currentuser.uid then reload the tableview this will show all the data except the current user

this is the code as promised:

but this need a little modification in your database make your database like this "users":{ "childbyautid":{ "fullname": "name", "profileimageurl": "your url", "userid": "userid" }

then you can write like this

var myArr = [String]()
Database.database().reference.child("users").observe(.value){(snapshot) in
if snapshot.childcount > 1 { self.myArr.removeAll()
for data in snapshot.children.allObjects as! [DataSnapshot]{
if let d = data.value as? [string: any]{
if Auth.auth.currentuser.uid != d["userid"]{
myArr.append(d["name"]}else{print("this is the user itself"}}}

Upvotes: 1

Related Questions