Skip to content

Commit

Permalink
Merge branch 'main' into adiUi
Browse files Browse the repository at this point in the history
  • Loading branch information
UnityGameDesigner committed Aug 1, 2022
2 parents 32fa318 + c8922a1 commit a1b90be
Show file tree
Hide file tree
Showing 9 changed files with 358 additions and 120 deletions.
142 changes: 91 additions & 51 deletions jackfruit/contacts-add/ContactsAdd.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,27 @@ import ToastUI
class ContactsAddVM: ObservableObject {
let db = Firestore.firestore()
@Published var contactModel: UserModel = UserModel()
func addPersonalRelationship(userId: String, personalContact: String){
guard userId != "" else {
print("User ID is empty")
return
}
guard personalContact != "" else {
print("Personal contact number is empty")
@Published var groupName: String = ""
@Published var groupExists: Bool?
@Published var showContactAddedDialog: Bool = false
@AppStorage("user_id") var userId: String = ""

func addProfessionalContact(contactNumber: String) {
guard contactNumber != "" else {
print("Contact number is empty")
return
}
print("user ID is \(userId)")
let currentUserRef = db.collection("users").document(userId)
currentUserRef.updateData([
"personal_contacts": FieldValue.arrayUnion([personalContact])

]) { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
Task {
await doAsyncGetUser(contactNumber: contactNumber, completion: { contactModel in
self.contactModel = contactModel
self.showContactAddedDialog = true
self.addProfessionalRelationship(professionalContact: contactNumber)
})
}
}

func addProfessionalRelationship(userId: String, professionalContact: String){

func addProfessionalRelationship(professionalContact: String){
guard userId != "" else {
print("User ID is empty")
return
Expand All @@ -59,7 +56,8 @@ class ContactsAddVM: ObservableObject {
}
}

func addGroup(userId: String, groupId: String){

func addGroup(groupId: String){
// Update one field, creating the document if it does not exist.
guard userId != "" else {
print("User ID is empty")
Expand All @@ -69,8 +67,8 @@ class ContactsAddVM: ObservableObject {
print("Group ID is empty")
return
}
print("user ID is \(userId)")
db.collection("groups").document(groupId).setData([ "members": FieldValue.arrayUnion([userId]) ], merge: true)
let docRef = db.collection("groups").document(groupId)
docRef.setData([ "members": FieldValue.arrayUnion([userId]) ], merge: true)
{ err in
if let err = err {
print("Error updating document: \(err)")
Expand All @@ -80,26 +78,37 @@ class ContactsAddVM: ObservableObject {
}
}

func fetchContactOverview(contactNumber: String){
self.contactModel = UserModel()
func addPersonalContact(contactNumber: String) {
guard contactNumber != "" else {
print("Contact number is empty")
return
}
Task {
await doAsyncStuff(contactNumber: contactNumber)
await doAsyncGetUser(contactNumber: contactNumber, completion: { contactModel in
self.contactModel = contactModel
self.showContactAddedDialog = true
self.addPersonalRelationship(personalContact: contactNumber)
})
}
}
// db.collection("users").document(professionalContact).getDocument { (snapshot, error) in
// if let error = error {
// print(error.localizedDescription)
// } else if let snapshot = snapshot {
// let contact: [UserModel] = snapshot.document.compactMap {
// return try? $0.data(as: UserModel.self)
// }
// }
// }

func doAsyncStuff(contactNumber: String) async{
await doAsyncGetUser(contactNumber: contactNumber, completion: { contactModel in
self.contactModel = contactModel
})

func addPersonalRelationship(personalContact: String){
guard userId != "" else {
print("User ID is empty")
return
}
print("user ID is \(userId)")
let currentUserRef = db.collection("users").document(userId)
currentUserRef.updateData([
"personal_contacts": FieldValue.arrayUnion([personalContact])

]) { err in
if let err = err {
print("Error updating document: \(err)")
} else {
print("Document successfully updated")
}
}
}

func doAsyncGetUser(contactNumber: String, completion: @escaping (UserModel) -> Void) async {
Expand All @@ -123,34 +132,65 @@ class ContactsAddVM: ObservableObject {
completion(contactModel)
}
}

func checkGroupExists(groupId: String, completion: @escaping(_ doesExist: Bool)->()){
// Update one field, creating the document if it does not exist.
guard userId != "" else {
print("User ID is empty")
return
}
guard groupId != "" else {
print("Group ID is empty")
return
}
let docRef = db.collection("groups").document(groupId)
docRef.getDocument { (document, error) in
if let document = document, document.exists {
// let dataDescription = document.data().map(String.init(describing:)) ?? "nil"
self.groupName = document.get("name") as? String ?? ""
print("Group name: \(self.groupName)")
completion(true)
// print("Document data: \(dataDescripti""on)")
} else {
print("Document does not exist")
completion(false)
}
}
}

}

struct ContactsAdd: View {
@StateObject var viewModel = ContactsAddVM()

@AppStorage("user_id") var storedUserId: String = ""

var body: some View {
ContactsAddView(
addWorkContactAction: { enteredNumber in
print("Executing professional with number \(enteredNumber)")
Task {
viewModel.addProfessionalRelationship(userId: storedUserId, professionalContact: enteredNumber)
viewModel.fetchContactOverview(contactNumber: enteredNumber)
}
viewModel.addProfessionalContact(contactNumber: enteredNumber)
},
addGroupContactAction: { enteredNumber in
print("Executing group with number \(enteredNumber)")
viewModel.addGroup(userId: storedUserId, groupId: enteredNumber)
Task {
// viewModel.checkGroupExists(userId: storedUserId, groupId: enteredNumber)
viewModel.addGroup(groupId: enteredNumber)
}
},
addFriendContactAction: { enteredNumber in
print("Executing personal with number \(enteredNumber)")
Task {
viewModel.addPersonalRelationship(userId: storedUserId, personalContact: enteredNumber)
viewModel.fetchContactOverview(contactNumber: enteredNumber)
viewModel.addPersonalContact(contactNumber: enteredNumber)
},
checkGroupExistsAction: { groupNumber in
print("Checking whether group \(groupNumber) exists")
var groupDoesExist: Bool = false
viewModel.checkGroupExists(groupId: groupNumber){ (doesExist) in
print("Found that group \(groupNumber) exists? \(doesExist)")
groupDoesExist = doesExist
}
return groupDoesExist
},
contactModel: $viewModel.contactModel
contactModel: $viewModel.contactModel,
groupName: $viewModel.groupName,
showContactAddedDialog: $viewModel.showContactAddedDialog
)
.onAppear() {
Analytics.logEvent(AnalyticsEventScreenView,
Expand Down
45 changes: 26 additions & 19 deletions jackfruit/contacts-add/ContactsAddView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
//

import SwiftUI
import Awesome

enum NumberButton: String {
case one = "1"
Expand All @@ -26,7 +27,7 @@ struct ContactsAddView: View {
let addWorkContactAction: (String) -> Void
let addGroupContactAction: (String) -> Void
let addFriendContactAction: (String) -> Void

let checkGroupExistsAction: (String) -> Bool

@State var enteredNumber = ""
@AppStorage("user_id") var userId: String = ""
Expand All @@ -35,7 +36,8 @@ struct ContactsAddView: View {
@State var groupSelected : Bool = true
@State var addSelected = false
@Binding var contactModel: UserModel

@Binding var groupName: String
@Binding var showContactAddedDialog: Bool
enum relationType {
case friend
case work
Expand All @@ -53,7 +55,6 @@ struct ContactsAddView: View {
@State var trimVal : CGFloat = 0
@State var width : CGFloat = 70
@State var hideTextLabel = false
@State var contactAddedAlert = false

var body: some View {
ZStack{
Expand Down Expand Up @@ -159,13 +160,13 @@ struct ContactsAddView: View {
{
AddRelationButtonView(isChecked: $addSelected, trimVal: $trimVal, width: $width, hideTextLabel: $hideTextLabel )
.onTapGesture {
print("Hit add with number \(enteredNumber)")
switch selectedRelation {
case .friend, .work:
guard enteredNumber.count == 10 else {
print("Contact number is invalid")
return
}
return
case .group:
guard enteredNumber.count == 5 else {
print("Group number is invalid")
Expand All @@ -186,24 +187,20 @@ struct ContactsAddView: View {
switch selectedRelation{
case .friend:
addFriendContactAction(enteredNumber)
print("Printing contact model")
print(contactModel.firstName ?? "No first name")
print(contactModel.lastName ?? "No first name")
friendSelected = false
groupSelected=true
contactAddedAlert = true
case .work:
addWorkContactAction(enteredNumber)
workSelected = false
groupSelected = true
contactAddedAlert = true
case .group:
// groupSelected = false
addGroupContactAction(enteredNumber)
// let doesGroupExist = checkGroupExistsAction(enteredNumber)

if(checkGroupExistsAction(enteredNumber)){
print("The group \(enteredNumber) exists?: true with name \(groupName)")
} else {
addGroupContactAction(enteredNumber)
}
case .none:
print("Error")
}
selectedRelation = .group

DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
withAnimation(){
Expand All @@ -214,12 +211,14 @@ struct ContactsAddView: View {
self.enteredNumber = ""
self.friendSelected = false
self.workSelected = false
self.groupSelected = false
self.groupSelected = true
showContactAddedDialog = false
selectedRelation = .group
print("Reset button")
}
}
}
.alert("\(self.contactModel.firstName ?? "") \(self.contactModel.lastName ?? "") Added", isPresented: $contactAddedAlert){
.alert("\(self.contactModel.firstName ?? "") \(self.contactModel.lastName ?? "") Added", isPresented: $showContactAddedDialog){
Button("OK", role: .cancel){}
}
}
Expand All @@ -241,7 +240,12 @@ struct ContactsAddView: View {
let number = button.rawValue
if enteredNumber == "" {
enteredNumber = number
} else {
} else if (selectedRelation == .friend || selectedRelation == .work) && enteredNumber.count >= 10{
enteredNumber = enteredNumber
} else if selectedRelation == .group && enteredNumber.count >= 5{
enteredNumber = enteredNumber
}
else {
enteredNumber = "\(enteredNumber)\(number)"
}
}
Expand Down Expand Up @@ -306,7 +310,10 @@ struct ContactsAddView_Previews: PreviewProvider {
addFriendContactAction: { enteredNumber in
// return UserModel()
print(enteredNumber)
}, contactModel: .constant(UserModel())
}, checkGroupExistsAction: { groupNumber in
print(groupNumber)
return true
}, contactModel: .constant(UserModel()), groupName: .constant("testingGroup"), showContactAddedDialog: .constant(false)
)
}
}
Loading

0 comments on commit a1b90be

Please sign in to comment.