diff --git a/PadelClub/Data/DataStore.swift b/PadelClub/Data/DataStore.swift index d74e818..1c643b2 100644 --- a/PadelClub/Data/DataStore.swift +++ b/PadelClub/Data/DataStore.swift @@ -16,6 +16,16 @@ class DataStore: ObservableObject { fileprivate(set) var tournaments: StoredCollection fileprivate(set) var clubs: StoredCollection + fileprivate var _userStorage: OptionalStorage = OptionalStorage(fileName: "user.json") + + var user: User? { + return self._userStorage.item + } + + func setUser(_ user: User?) { + self._userStorage.item = user + } + init() { let store = Store.main store.synchronizationApiURL = "http://127.0.0.1:8000/api/" diff --git a/PadelClub/Views/ContentView.swift b/PadelClub/Views/ContentView.swift index c98eb51..4019072 100644 --- a/PadelClub/Views/ContentView.swift +++ b/PadelClub/Views/ContentView.swift @@ -35,7 +35,8 @@ struct ContentView: View { .toolbar(content: { ToolbarItem { NavigationLink { - LoginView() + MainUserView() + .environmentObject(self.dataStore) } label: { Image(systemName: "person.circle.fill") } diff --git a/PadelClub/Views/User/ChangePasswordView.swift b/PadelClub/Views/User/ChangePasswordView.swift index 7b56e9d..bcec891 100644 --- a/PadelClub/Views/User/ChangePasswordView.swift +++ b/PadelClub/Views/User/ChangePasswordView.swift @@ -10,19 +10,17 @@ import LeStorage struct ChangePasswordView: View { - @State var password1: String = "staxkikoo" - @State var password2: String = "staxkikoo" + @State var oldPassword: String = "" + @State var password1: String = "" + @State var password2: String = "" var body: some View { Form { + SecureField("Old password", text: self.$oldPassword) SecureField("Password", text: self.$password1) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) SecureField("Password again", text: self.$password2) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) Section { Button(action: { @@ -42,7 +40,10 @@ struct ChangePasswordView: View { } Task { do { - _ = try await service.changePassword(password1: self.password1, password2: self.password2) + _ = try await service.changePassword( + oldPassword: self.oldPassword, + password1: self.password1, + password2: self.password2) } catch { Logger.error(error) } @@ -53,5 +54,7 @@ struct ChangePasswordView: View { } #Preview { - ChangePasswordView() + NavigationStack { + ChangePasswordView() + } } diff --git a/PadelClub/Views/User/LoginView.swift b/PadelClub/Views/User/LoginView.swift index 9193e1e..09ec6d0 100644 --- a/PadelClub/Views/User/LoginView.swift +++ b/PadelClub/Views/User/LoginView.swift @@ -8,10 +8,32 @@ import SwiftUI import LeStorage +struct LoginAccountView: View { + + @State var user: User? = nil + + var body: some View { + if let user { + AccountView(user: user) + } else { + LoginView(handler: { user in + self.user = user + }) + } + } + +} + struct LoginView: View { + @EnvironmentObject var dataStore: DataStore + @State var username: String = "laurent" - @State var password: String = "staxkikoo" + @State var password: String = "staxkikoo12" + + @State var error: Error? = nil + + var handler: (User) -> () var body: some View { @@ -21,8 +43,6 @@ struct LoginView: View { .autocorrectionDisabled() .textInputAutocapitalization(.never) SecureField("Password", text: self.$password) - .autocorrectionDisabled() - .textInputAutocapitalization(.never) Section { Button(action: { @@ -34,23 +54,17 @@ struct LoginView: View { } Section { - HStack { - Button(action: { - self._login() - }, label: { - Text("Sign up") - }) - .frame(maxWidth: .infinity) - Button(action: { - self._login() - }, label: { - Text("Forgotten password") - }) - .frame(maxWidth: .infinity) - - } + Button(action: { + self._signUp() + }, label: { + Text("Sign up") + }) + Button(action: { + self._forgottenPassword() + }, label: { + Text("Forgotten password") + }) } - } .navigationTitle("Login") @@ -62,18 +76,29 @@ struct LoginView: View { } Task { do { - let _: User = try await service.login( + let user: User = try await service.login( username: self.username, password: self.password) + self.dataStore.setUser(user) + self.handler(user) } catch { Logger.error(error) } } + } + + fileprivate func _signUp() { } + fileprivate func _forgottenPassword() { +// Store.main.service?.forgotPassword(user: <#T##UserBase#>) + } + } #Preview { - LoginView() + NavigationStack { + LoginView(handler: { _ in }) + } } diff --git a/PadelClub/Views/User/MainUserView.swift b/PadelClub/Views/User/MainUserView.swift index 0918d38..b0eefd2 100644 --- a/PadelClub/Views/User/MainUserView.swift +++ b/PadelClub/Views/User/MainUserView.swift @@ -10,15 +10,14 @@ import LeStorage struct MainUserView: View { + @EnvironmentObject var dataStore: DataStore + var body: some View { - -// if let user = , Store.main.hasToken() { -// AccountView(user: user) -// } else { -// LoginView() -// } - - Text("test") + if let user = dataStore.user, Store.main.hasToken() { + AccountView(user: user) + } else { + LoginAccountView() + } } } diff --git a/PadelClub/Views/User/User.swift b/PadelClub/Views/User/User.swift index 2d879ab..f0ca1f2 100644 --- a/PadelClub/Views/User/User.swift +++ b/PadelClub/Views/User/User.swift @@ -9,6 +9,7 @@ import Foundation import LeStorage class User: UserBase { + public var id: String = Store.randomId() public var username: String public var email: String?