brute force working but just need to navigate user back to circle
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
8904DEC8277055E90071E6CA /* OnboardingTrioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8904DEC7277055E90071E6CA /* OnboardingTrioView.swift */; };
|
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 */; };
|
891A15E127653A7000B26659 /* nirvana_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A15E027653A7000B26659 /* nirvana_iosApp.swift */; };
|
||||||
891A15E327653A7000B26659 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A15E227653A7000B26659 /* ContentView.swift */; };
|
891A15E327653A7000B26659 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891A15E227653A7000B26659 /* ContentView.swift */; };
|
||||||
891A15E527653A7100B26659 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 891A15E427653A7100B26659 /* Assets.xcassets */; };
|
891A15E527653A7100B26659 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 891A15E427653A7100B26659 /* Assets.xcassets */; };
|
||||||
@@ -79,6 +80,7 @@
|
|||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
8904DEC7277055E90071E6CA /* OnboardingTrioView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingTrioView.swift; sourceTree = "<group>"; };
|
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; };
|
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>"; };
|
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>"; };
|
891A15E227653A7000B26659 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
|
||||||
@@ -282,6 +284,7 @@
|
|||||||
children = (
|
children = (
|
||||||
89BDCDF02769E64200577829 /* Messages.swift */,
|
89BDCDF02769E64200577829 /* Messages.swift */,
|
||||||
891A160D27657CEA00B26659 /* User.swift */,
|
891A160D27657CEA00B26659 /* User.swift */,
|
||||||
|
89110713277166D6005797FA /* UserFriends.swift */,
|
||||||
);
|
);
|
||||||
path = Models;
|
path = Models;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -530,6 +533,7 @@
|
|||||||
896CE7052770AE5D00DB474E /* InboxView.swift in Sources */,
|
896CE7052770AE5D00DB474E /* InboxView.swift in Sources */,
|
||||||
891A160327656FC700B26659 /* HomeView.swift in Sources */,
|
891A160327656FC700B26659 /* HomeView.swift in Sources */,
|
||||||
896CE70927712CED00DB474E /* StringExtension.swift in Sources */,
|
896CE70927712CED00DB474E /* StringExtension.swift in Sources */,
|
||||||
|
89110714277166D6005797FA /* UserFriends.swift in Sources */,
|
||||||
896CE70727711BAB00DB474E /* FindFriendsView.swift in Sources */,
|
896CE70727711BAB00DB474E /* FindFriendsView.swift in Sources */,
|
||||||
891A160B2765732700B26659 /* HomeViewModel.swift in Sources */,
|
891A160B2765732700B26659 /* HomeViewModel.swift in Sources */,
|
||||||
89BCABEB276D2A09009E9B10 /* PhoneVerificationView.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 Foundation
|
||||||
import Firebase
|
import Firebase
|
||||||
|
import FirebaseCore
|
||||||
import FirebaseFirestore
|
import FirebaseFirestore
|
||||||
|
import FirebaseFirestoreSwift
|
||||||
|
|
||||||
class FirestoreService {
|
class FirestoreService {
|
||||||
enum Collection: String {
|
enum Collection: String {
|
||||||
case users = "users"
|
case users = "users"
|
||||||
case messages = "messages"
|
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()
|
private var db = Firestore.firestore()
|
||||||
@@ -103,4 +105,21 @@ class FirestoreService {
|
|||||||
return FieldValue.serverTimestamp()
|
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)))
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 SwiftUI
|
||||||
import Contacts
|
import Contacts
|
||||||
|
import NavigationStack
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -24,7 +25,7 @@ struct FindFriendsView: View {
|
|||||||
List {
|
List {
|
||||||
ForEach(searchItems, id: \.self) { key in
|
ForEach(searchItems, id: \.self) { key in
|
||||||
if let currContact = self.contactsVM.contacts[key] {
|
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) }
|
return keys.filter { $0.contains(self.searchQuery) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FindFriendsView_Previews: PreviewProvider {
|
struct FindFriendsView_Previews: PreviewProvider {
|
||||||
@@ -55,14 +58,16 @@ struct FindFriendsView_Previews: PreviewProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct ListContactRow: View {
|
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 showAlert = false
|
||||||
@State var alertText = ""
|
@State var alertText = "🌱Confirm Arjun into Your Circle?"
|
||||||
@State var alertMessage = ""
|
@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 {
|
var body: some View {
|
||||||
if contact.isExisting { // add to circle
|
if contact.isExisting { // add to circle
|
||||||
@@ -81,9 +86,9 @@ struct ListContactRow: View {
|
|||||||
Spacer()
|
Spacer()
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
print("adding contact to circle")
|
print("showing alert now")
|
||||||
|
// TODO: show alert if circle is full
|
||||||
//show alert if circle is full
|
self.showAlert.toggle()
|
||||||
|
|
||||||
} label: {
|
} label: {
|
||||||
Label("Add", systemImage: "plus.circle")
|
Label("Add", systemImage: "plus.circle")
|
||||||
@@ -91,6 +96,16 @@ struct ListContactRow: View {
|
|||||||
.foregroundColor(NirvanaColor.solidTeal)
|
.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
|
else { // invite button to text the person
|
||||||
HStack(alignment: .center, spacing: 0) {
|
HStack(alignment: .center, spacing: 0) {
|
||||||
@@ -128,3 +143,5 @@ struct ListContactRow: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user