diff --git a/nirvana-ios.xcodeproj/project.pbxproj b/nirvana-ios.xcodeproj/project.pbxproj index 4e43700..4c31123 100644 --- a/nirvana-ios.xcodeproj/project.pbxproj +++ b/nirvana-ios.xcodeproj/project.pbxproj @@ -35,6 +35,8 @@ 89BDCDE72769616600577829 /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BDCDE62769616600577829 /* UIImage+Extension.swift */; }; 89BDCDEA27697F9C00577829 /* UserMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BDCDE927697F9C00577829 /* UserMenu.swift */; }; 89BDCDEC2769918D00577829 /* OnboardingTrioView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BDCDEB2769918D00577829 /* OnboardingTrioView.swift */; }; + 89BDCDEF2769B50C00577829 /* ContactsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BDCDEE2769B50C00577829 /* ContactsView.swift */; }; + 89BDCDF12769E64200577829 /* Firestore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89BDCDF02769E64200577829 /* Firestore.swift */; }; 89D99D2E2766FD6B00237814 /* Liquid in Frameworks */ = {isa = PBXBuildFile; productRef = 89D99D2D2766FD6B00237814 /* Liquid */; }; 89F1386D2767EB19006680ED /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89F1386C2767EB19006680ED /* SignInView.swift */; }; 89F138702767F55F006680ED /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = 89F1386F2767F55F006680ED /* GoogleSignIn */; }; @@ -67,6 +69,8 @@ 89BDCDE62769616600577829 /* UIImage+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Extension.swift"; sourceTree = ""; }; 89BDCDE927697F9C00577829 /* UserMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserMenu.swift; sourceTree = ""; }; 89BDCDEB2769918D00577829 /* OnboardingTrioView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingTrioView.swift; sourceTree = ""; }; + 89BDCDEE2769B50C00577829 /* ContactsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsView.swift; sourceTree = ""; }; + 89BDCDF02769E64200577829 /* Firestore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Firestore.swift; sourceTree = ""; }; 89F1386C2767EB19006680ED /* SignInView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -140,6 +144,7 @@ 891A15F62765639B00B26659 /* Views */ = { isa = PBXGroup; children = ( + 89BDCDED2769B3EB00577829 /* Contacts */, 89F1386B2767EB07006680ED /* SignIn */, 892179E22765FE93001E6C60 /* FooterControlsView */, 891A16052765726800B26659 /* Templates */, @@ -186,6 +191,7 @@ 891A15FC276566B800B26659 /* constants.swift */, 89BDCDE427695DB900577829 /* NirvanaImage.swift */, 89BDCDE62769616600577829 /* UIImage+Extension.swift */, + 89BDCDF02769E64200577829 /* Firestore.swift */, ); path = Globals; sourceTree = ""; @@ -232,6 +238,14 @@ path = UserMenu; sourceTree = ""; }; + 89BDCDED2769B3EB00577829 /* Contacts */ = { + isa = PBXGroup; + children = ( + 89BDCDEE2769B50C00577829 /* ContactsView.swift */, + ); + path = Contacts; + sourceTree = ""; + }; 89F1386B2767EB07006680ED /* SignIn */ = { isa = PBXGroup; children = ( @@ -334,6 +348,7 @@ 89288ECB27675B9F00E962C4 /* OnboardingTemplateView.swift in Sources */, 89B46E71276893E200B74255 /* AuthSessionStore.swift in Sources */, 891A15F9276563CA00B26659 /* WelcomeView.swift in Sources */, + 89BDCDEF2769B50C00577829 /* ContactsView.swift in Sources */, 891A1611276590B000B26659 /* ChatsCarouselView.swift in Sources */, 89BDCDE527695DB900577829 /* NirvanaImage.swift in Sources */, 891A16132765A44300B26659 /* ChatsCarouselViewModel.swift in Sources */, @@ -345,6 +360,7 @@ 891A15FD276566B800B26659 /* constants.swift in Sources */, 89BDCDE72769616600577829 /* UIImage+Extension.swift in Sources */, 89F1386D2767EB19006680ED /* SignInView.swift in Sources */, + 89BDCDF12769E64200577829 /* Firestore.swift in Sources */, 891A160E27657CEA00B26659 /* User.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/nirvana-ios/ContentView.swift b/nirvana-ios/ContentView.swift index ae6bbb2..c822248 100644 --- a/nirvana-ios/ContentView.swift +++ b/nirvana-ios/ContentView.swift @@ -12,12 +12,13 @@ struct ContentView: View { var body: some View { ZStack { - switch self.authSessionStore.sessionState { - case SessionState.isAuthenticated: - HomeView() - case SessionState.isLoggedOut: - WelcomeView() - } + ContactsView() // TEMPORARY FOR TESTING +// switch self.authSessionStore.sessionState { +// case SessionState.isAuthenticated: +// HomeView() +// case SessionState.isLoggedOut: +// WelcomeView() +// } }.animation(.default, value:authSessionStore.sessionState) } } diff --git a/nirvana-ios/Globals/Firestore.swift b/nirvana-ios/Globals/Firestore.swift new file mode 100644 index 0000000..27bec7d --- /dev/null +++ b/nirvana-ios/Globals/Firestore.swift @@ -0,0 +1,34 @@ +// +// Firestore.swift +// nirvana-ios +// +// Created by Arjun Patel on 12/15/21. +// + +import Foundation + +public class Firestore { +// public struct User: Codable { +// let id: String +// let firstName: String +// let lastName: String? +// let mainPhoneNumber: String? +// let emailAddress:String? +// let photoUrl:String? +// +// let lastLoggedInTimestamp: Date +// let createdTimestamp: Date +// } +// +// public struct Messages: Codable { +// let id: String +// let senderId: String +// let receiverId: String +// +// let sentTimestamp:Date +// let listenedTimestamp:Date +// let audioDataUrl:String +// +// } +} + diff --git a/nirvana-ios/Views/Contacts/ContactsView.swift b/nirvana-ios/Views/Contacts/ContactsView.swift new file mode 100644 index 0000000..4169098 --- /dev/null +++ b/nirvana-ios/Views/Contacts/ContactsView.swift @@ -0,0 +1,83 @@ +// +// ContactsView.swift +// nirvana-ios +// +// Created by Arjun Patel on 12/14/21. +// + +import SwiftUI + +struct ContactsView: View { + var testUsers:[TestUser] = [ + TestUser(_profilePic: "liam", _firstN: "Liam", _lastN: "Digregorio"), + TestUser(_profilePic: "heran", _firstN: "Heran", _lastN: "Patel"), + TestUser(_profilePic: "sarth", _firstN: "Sarth", _lastN: "Shah"), + TestUser(_profilePic: "kevin", _firstN: "Kevin", _lastN: "Le"), + TestUser(_profilePic: "rohan", _firstN: "Rohan", _lastN: "Chadha") + ] + + var body: some View { + List { + ForEach(testUsers) { user in + let fullName = "\(user.firstName) \(user.lastName)" + IndividualContactView(name: fullName, imageName: user.profilePictureUrl) + } + } + } + + +} + +struct ContactsView_Previews: PreviewProvider { + static var previews: some View { + ContactsView().environmentObject(AuthSessionStore()) + } +} + +private struct IndividualContactView: View { + var name: String + var imageName: String + + @Namespace private var animation + @State var addedUser = false + + var body: some View { + HStack(alignment: .center, spacing: 0) { + Image(imageName) + .resizable() + .scaledToFit() + .clipShape(Circle()) + .frame(width: 40, height: 40) + .padding(.trailing, 10) + + Text(name) + .font(.headline) + + Spacer() + + VStack { + if addedUser { + Label("Added", systemImage: "person.crop.circle.fill.badge.checkmark") + .font(.title2) + .foregroundColor(NirvanaColor.solidTeal) + .labelStyle(IconOnlyLabelStyle()) + .matchedGeometryEffect(id: "add-contact", in: animation) + } else { + Button { + print("pressed add button") + } label: { + Label("Add", systemImage: "plus.circle") + .font(.title2) + .foregroundColor(NirvanaColor.solidTeal) + .labelStyle(IconOnlyLabelStyle()) + .matchedGeometryEffect(id: "add-contact", in: animation) + } + } + }.onTapGesture { + withAnimation(Animation.interpolatingSpring(stiffness: 300, damping: 30)) { + self.addedUser.toggle() + } + } + } + } +}