brute force working but just need to navigate user back to circle
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
8904DEC8277055E90071E6CA /* OnboardingTrioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8904DEC7277055E90071E6CA /* OnboardingTrioView.swift */; };
|
||||
89110714277166D6005797FA /* UserFriends.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89110713277166D6005797FA /* UserFriends.swift */; };
|
||||
891A15E127653A7000B26659 /* nirvana_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A15E027653A7000B26659 /* nirvana_iosApp.swift */; };
|
||||
891A15E327653A7000B26659 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A15E227653A7000B26659 /* ContentView.swift */; };
|
||||
891A15E527653A7100B26659 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 891A15E427653A7100B26659 /* Assets.xcassets */; };
|
||||
@@ -79,6 +80,7 @@
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
8904DEC7277055E90071E6CA /* OnboardingTrioView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTrioView.swift; sourceTree = "<group>"; };
|
||||
89110713277166D6005797FA /* UserFriends.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFriends.swift; sourceTree = "<group>"; };
|
||||
891A15DD27653A7000B26659 /* nirvana-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "nirvana-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
891A15E027653A7000B26659 /* nirvana_iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = nirvana_iosApp.swift; sourceTree = "<group>"; };
|
||||
891A15E227653A7000B26659 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||
@@ -282,6 +284,7 @@
|
||||
children = (
|
||||
89BDCDF02769E64200577829 /* Messages.swift */,
|
||||
891A160D27657CEA00B26659 /* User.swift */,
|
||||
89110713277166D6005797FA /* UserFriends.swift */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
@@ -530,6 +533,7 @@
|
||||
896CE7052770AE5D00DB474E /* InboxView.swift in Sources */,
|
||||
891A160327656FC700B26659 /* HomeView.swift in Sources */,
|
||||
896CE70927712CED00DB474E /* StringExtension.swift in Sources */,
|
||||
89110714277166D6005797FA /* UserFriends.swift in Sources */,
|
||||
896CE70727711BAB00DB474E /* FindFriendsView.swift in Sources */,
|
||||
891A160B2765732700B26659 /* HomeViewModel.swift in Sources */,
|
||||
89BCABEB276D2A09009E9B10 /* PhoneVerificationView.swift in Sources */,
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user