got alerts and actions working, but the ui isn't smooth with the grid because I have too many elements changing
This commit is contained in:
@@ -108,7 +108,7 @@ class FirestoreService {
|
|||||||
return FieldValue.serverTimestamp()
|
return FieldValue.serverTimestamp()
|
||||||
}
|
}
|
||||||
|
|
||||||
func createOrUpdateUserFriends(userFriend: UserFriends, completion: @escaping((_ state: ServiceState) -> ())) {
|
func createOrUpdateUserFriends(userFriend: UserFriends, activateOrDeactivate: Bool, completion: @escaping((_ state: ServiceState) -> ())) {
|
||||||
do {
|
do {
|
||||||
let userFriendCollection = db.collection(Collection.userFriends.rawValue)
|
let userFriendCollection = db.collection(Collection.userFriends.rawValue)
|
||||||
|
|
||||||
@@ -131,14 +131,13 @@ class FirestoreService {
|
|||||||
else { // there seems to be something existing
|
else { // there seems to be something existing
|
||||||
for document in querySnapshot!.documents {
|
for document in querySnapshot!.documents {
|
||||||
// update this userFriend that is existing
|
// update this userFriend that is existing
|
||||||
let _ = try? userFriendCollection.document(document.documentID).setData(["isActive": true, "lastUpdatedTimestamp": self.getFirestoreServerTimestamp()], merge:true)
|
let _ = try? userFriendCollection.document(document.documentID).setData(["isActive": activateOrDeactivate, "lastUpdatedTimestamp": self.getFirestoreServerTimestamp()], merge:true)
|
||||||
print("already existing, just updated")
|
print("already existing, just updated")
|
||||||
completion(ServiceState.success("updated userfriend in firestore service"))
|
completion(ServiceState.success("updated userfriend in firestore service"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch {
|
} catch {
|
||||||
print("error in creating user friend \(error.localizedDescription)")
|
print("error in creating user friend \(error.localizedDescription)")
|
||||||
completion(ServiceState.error(ServiceError(description: error.localizedDescription)))
|
completion(ServiceState.error(ServiceError(description: error.localizedDescription)))
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class ContactsViewModel : ObservableObject {
|
|||||||
// setting timestamps to nil to make sure that new server timestamp is set
|
// setting timestamps to nil to make sure that new server timestamp is set
|
||||||
var userFriend = UserFriends(userId: userId, friendId: friendId, isActive: true, lastUpdatedTimestamp: nil)
|
var userFriend = UserFriends(userId: userId, friendId: friendId, isActive: true, lastUpdatedTimestamp: nil)
|
||||||
|
|
||||||
self.firestoreService.createOrUpdateUserFriends(userFriend: userFriend) {[weak self] res in
|
self.firestoreService.createOrUpdateUserFriends(userFriend: userFriend, activateOrDeactivate: true) {[weak self] res in
|
||||||
completion(res)
|
completion(res)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ struct FindFriendsView: View {
|
|||||||
// main content
|
// main content
|
||||||
NavigationView {
|
NavigationView {
|
||||||
VStack {
|
VStack {
|
||||||
Text("You must have someone in your phone contacts to add them. You can only add 10 people to your circle! 🥬")
|
Text("You must have someone in your phone contacts to add them. Remember: \(self.authSessionStore.getActiveFriendIds().count)/10 spots filled in your circle. 🥬")
|
||||||
.font(.subheadline)
|
.font(.subheadline)
|
||||||
.foregroundColor(NirvanaColor.teal)
|
.foregroundColor(Color.gray)
|
||||||
.padding(.horizontal)
|
.padding(.horizontal)
|
||||||
|
|
||||||
List {
|
List {
|
||||||
|
|||||||
@@ -45,6 +45,10 @@ struct CircleGridView: View {
|
|||||||
|
|
||||||
let longPressMinDuration = 0.5
|
let longPressMinDuration = 0.5
|
||||||
|
|
||||||
|
@State var alertActive = false
|
||||||
|
@State var alertText = ""
|
||||||
|
@State var alertSubtext = ""
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
// main communication hub
|
// main communication hub
|
||||||
// TODO: client side, sort the honeycomb from top left to bottom right
|
// TODO: client side, sort the honeycomb from top left to bottom right
|
||||||
@@ -178,10 +182,32 @@ struct CircleGridView: View {
|
|||||||
.frame(height: Self.size)
|
.frame(height: Self.size)
|
||||||
.onTapGesture {
|
.onTapGesture {
|
||||||
// action to open alert to add this person to circle or reject
|
// action to open alert to add this person to circle or reject
|
||||||
|
let inboxFriendName = self.authSessionStore.relevantUsersDict[inboxUserId]?.nickname ?? ""
|
||||||
|
let inboxFriendNumber = self.authSessionStore.relevantUsersDict[inboxUserId]?.phoneNumber
|
||||||
|
|
||||||
// create user_friend with isActive = false
|
self.alertText = "🌴Add to your circle?"
|
||||||
|
self.alertSubtext = "\(inboxFriendName ?? "") started a convo with you... \n \(inboxFriendNumber!) \n Remember: you have \(10 - activeFriends.count) spots left!"
|
||||||
|
self.alertActive.toggle()
|
||||||
}
|
}
|
||||||
.animation(Animation.spring())
|
.animation(Animation.spring())
|
||||||
|
.alert(isPresented: self.$alertActive) {
|
||||||
|
Alert(
|
||||||
|
title: Text(self.alertText),
|
||||||
|
message: Text(self.alertSubtext),
|
||||||
|
primaryButton: .destructive(Text("Reject"), action: {
|
||||||
|
// create user friend but a rejected one
|
||||||
|
self.innerCircleVM.activateOrDeactiveInboxUser(activate: false, userId: self.authSessionStore.user!.id!, friendId: inboxUserId) { res in
|
||||||
|
print(res)
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
secondaryButton: .default(Text("Add"), action: {
|
||||||
|
// create user friend
|
||||||
|
self.innerCircleVM.activateOrDeactiveInboxUser(activate: true, userId: self.authSessionStore.user!.id!, friendId: inboxUserId) { res in
|
||||||
|
print(res)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// stale state for adding a contact
|
// stale state for adding a contact
|
||||||
@@ -219,13 +245,13 @@ struct CircleGridView: View {
|
|||||||
.padding(.trailing, Self.size / 2 + Self.spacingBetweenColumns / 2) // because of the offset of last column
|
.padding(.trailing, Self.size / 2 + Self.spacingBetweenColumns / 2) // because of the offset of last column
|
||||||
.padding(.top, Self.size / 2 + Self.spacingBetweenRows / 2) // because we are going under the nav bar
|
.padding(.top, Self.size / 2 + Self.spacingBetweenRows / 2) // because we are going under the nav bar
|
||||||
}// scrollview
|
}// scrollview
|
||||||
.onAppear {
|
|
||||||
//TODO: was causing problems so commenting out
|
|
||||||
//may not need anymore with bottom nav activation
|
|
||||||
// scrollReaderValue.scrollTo(Self.numberOfItems / 2)
|
|
||||||
|
|
||||||
}
|
|
||||||
} // scrollview reader
|
} // scrollview reader
|
||||||
|
.onAppear {
|
||||||
|
//TODO: was causing problems so commenting out
|
||||||
|
//may not need anymore with bottom nav activation
|
||||||
|
// scrollReaderValue.scrollTo(Self.numberOfItems / 2)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -109,3 +109,22 @@ extension InnerCircleViewModel {
|
|||||||
self.pushNotificationService.updateFirestorePushTokenIfNeeded()
|
self.pushNotificationService.updateFirestorePushTokenIfNeeded()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handle activating or deactivating friends
|
||||||
|
extension InnerCircleViewModel {
|
||||||
|
func activateOrDeactiveInboxUser(activate: Bool, userId: String, friendId: String, completion: @escaping((_ state: ServiceState) -> ())) {
|
||||||
|
// validation
|
||||||
|
// make sure userId is not the same as friendId...don't want people friending themselves
|
||||||
|
if userId == friendId {
|
||||||
|
completion(ServiceState.error(ServiceError(description: "You cannot friend yourself, silly!")))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// setting timestamps to nil to make sure that new server timestamp is set
|
||||||
|
var userFriend = UserFriends(userId: userId, friendId: friendId, isActive: true, lastUpdatedTimestamp: nil)
|
||||||
|
|
||||||
|
self.firestoreService.createOrUpdateUserFriends(userFriend: userFriend, activateOrDeactivate: activate) {[weak self] res in
|
||||||
|
completion(res)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user