brute force working but just need to navigate user back to circle

This commit is contained in:
talksik
2021-12-20 18:36:23 -08:00
parent 4c5f8e6985
commit 61d357875a
6 changed files with 94 additions and 11 deletions
+34
View File
@@ -0,0 +1,34 @@
//
// UserFriends.swift
// nirvana-ios
//
// Created by Arjun Patel on 12/20/21.
//
import Foundation
import Firebase
import FirebaseFirestoreSwift
enum UserFriendsState {
case active
case inactive
}
struct UserFriends: Identifiable, Codable {
@DocumentID var id: String? = UUID().uuidString
var userId: String
var friendId: String
var isActive: Bool
@ServerTimestamp var lastUpdatedTimestamp: Date?
@ServerTimestamp var createdTimestamp: Date?
enum CodingKeys: String, CodingKey {
case id
case userId
case friendId
case isActive
case createdTimestamp
case lastUpdatedTimestamp
}
}
@@ -7,13 +7,15 @@
import Foundation
import Firebase
import FirebaseCore
import FirebaseFirestore
import FirebaseFirestoreSwift
class FirestoreService {
enum Collection: String {
case users = "users"
case messages = "messages"
case user_friends = "user_friends" // associating a user to
case userFriends = "user_friends" // associating a user to
}
private var db = Firestore.firestore()
@@ -103,4 +105,21 @@ class FirestoreService {
return FieldValue.serverTimestamp()
}
func createOrUpdateUserFriends(userFriend: UserFriends, completion: @escaping((_ state: ServiceState) -> ())) {
do {
if userFriend.id != nil {
let _ = try db.collection(Collection.userFriends.rawValue).addDocument(from: userFriend)
completion(ServiceState.success("created/updated userfriend in firestore service"))
} else {
completion(ServiceState.error(ServiceError(description: "No userfriend id given to firestore service")))
}
} catch {
print("error in creating user friend \(error.localizedDescription)")
completion(ServiceState.error(ServiceError(description: error.localizedDescription)))
}
}
}
@@ -102,7 +102,7 @@ struct AddBasicInfoView: View {
Spacer()
// button to save information
Button {
print("attempting to save information")
@@ -93,6 +93,15 @@ class ContactsViewModel : ObservableObject {
}
}
func addOrActivateFriendToCircle(userId: String, friendId: String) {
// setting timestamps to nil to make sure that new server timestamp is set
var userFriend = UserFriends(userId: userId, friendId: friendId, isActive: true, lastUpdatedTimestamp: nil, createdTimestamp: nil)
self.firestoreService.createOrUpdateUserFriends(userFriend: userFriend) {[weak self] res in
print(res)
}
}
}
@@ -7,6 +7,7 @@
import SwiftUI
import Contacts
import NavigationStack
@@ -24,7 +25,7 @@ struct FindFriendsView: View {
List {
ForEach(searchItems, id: \.self) { key in
if let currContact = self.contactsVM.contacts[key] {
ListContactRow(contact: currContact)
ListContactRow(contactsVM: self.contactsVM, contact: currContact)
}
}
}
@@ -47,6 +48,8 @@ struct FindFriendsView: View {
return keys.filter { $0.contains(self.searchQuery) }
}
}
}
struct FindFriendsView_Previews: PreviewProvider {
@@ -55,14 +58,16 @@ struct FindFriendsView_Previews: PreviewProvider {
}
}
struct ListContactRow: View {
var contact: ContactsViewModelContact
@EnvironmentObject var navigationStack : NavigationStack
@EnvironmentObject var authSessionStore: AuthSessionStore
var contactsVM: ContactsViewModel
var contact:ContactsViewModelContact
@State var showAlert = false
@State var alertText = ""
@State var alertMessage = ""
@State var alertText = "🌱Confirm Arjun into Your Circle?"
@State var alertMessage = "Note: You can have a maximium of 12 people in your circle and you have 5 swaps left!"
var body: some View {
if contact.isExisting { // add to circle
@@ -81,9 +86,9 @@ struct ListContactRow: View {
Spacer()
Button {
print("adding contact to circle")
//show alert if circle is full
print("showing alert now")
// TODO: show alert if circle is full
self.showAlert.toggle()
} label: {
Label("Add", systemImage: "plus.circle")
@@ -91,6 +96,16 @@ struct ListContactRow: View {
.foregroundColor(NirvanaColor.solidTeal)
}
}
.alert(self.alertText, isPresented: self.$showAlert) {
Button("Add \(contact.cnName)", role: ButtonRole.cancel) {
print("adding contact to circle")
// call method in vm to get it done, then navigate to the circle
self.contactsVM.addOrActivateFriendToCircle(userId: self.authSessionStore.user!.id!, friendId: (contact.user!.id)!)
}
} message: {
Text(self.alertMessage)
}
}
else { // invite button to text the person
HStack(alignment: .center, spacing: 0) {
@@ -128,3 +143,5 @@ struct ListContactRow: View {
}
}
}