Update for user views

multistore
Laurent 2 years ago
parent 3ae4fbf7ab
commit ea806eb00b
  1. 10
      PadelClub/Data/DataStore.swift
  2. 3
      PadelClub/Views/ContentView.swift
  3. 19
      PadelClub/Views/User/ChangePasswordView.swift
  4. 67
      PadelClub/Views/User/LoginView.swift
  5. 15
      PadelClub/Views/User/MainUserView.swift
  6. 1
      PadelClub/Views/User/User.swift

@ -16,6 +16,16 @@ class DataStore: ObservableObject {
fileprivate(set) var tournaments: StoredCollection<Tournament> fileprivate(set) var tournaments: StoredCollection<Tournament>
fileprivate(set) var clubs: StoredCollection<Club> fileprivate(set) var clubs: StoredCollection<Club>
fileprivate var _userStorage: OptionalStorage<User> = OptionalStorage<User>(fileName: "user.json")
var user: User? {
return self._userStorage.item
}
func setUser(_ user: User?) {
self._userStorage.item = user
}
init() { init() {
let store = Store.main let store = Store.main
store.synchronizationApiURL = "http://127.0.0.1:8000/api/" store.synchronizationApiURL = "http://127.0.0.1:8000/api/"

@ -35,7 +35,8 @@ struct ContentView: View {
.toolbar(content: { .toolbar(content: {
ToolbarItem { ToolbarItem {
NavigationLink { NavigationLink {
LoginView() MainUserView()
.environmentObject(self.dataStore)
} label: { } label: {
Image(systemName: "person.circle.fill") Image(systemName: "person.circle.fill")
} }

@ -10,19 +10,17 @@ import LeStorage
struct ChangePasswordView: View { struct ChangePasswordView: View {
@State var password1: String = "staxkikoo" @State var oldPassword: String = ""
@State var password2: String = "staxkikoo" @State var password1: String = ""
@State var password2: String = ""
var body: some View { var body: some View {
Form { Form {
SecureField("Old password", text: self.$oldPassword)
SecureField("Password", text: self.$password1) SecureField("Password", text: self.$password1)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
SecureField("Password again", text: self.$password2) SecureField("Password again", text: self.$password2)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
Section { Section {
Button(action: { Button(action: {
@ -42,7 +40,10 @@ struct ChangePasswordView: View {
} }
Task { Task {
do { 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 { } catch {
Logger.error(error) Logger.error(error)
} }
@ -53,5 +54,7 @@ struct ChangePasswordView: View {
} }
#Preview { #Preview {
ChangePasswordView() NavigationStack {
ChangePasswordView()
}
} }

@ -8,10 +8,32 @@
import SwiftUI import SwiftUI
import LeStorage 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 { struct LoginView: View {
@EnvironmentObject var dataStore: DataStore
@State var username: String = "laurent" @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 { var body: some View {
@ -21,8 +43,6 @@ struct LoginView: View {
.autocorrectionDisabled() .autocorrectionDisabled()
.textInputAutocapitalization(.never) .textInputAutocapitalization(.never)
SecureField("Password", text: self.$password) SecureField("Password", text: self.$password)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
Section { Section {
Button(action: { Button(action: {
@ -34,23 +54,17 @@ struct LoginView: View {
} }
Section { Section {
HStack { Button(action: {
Button(action: { self._signUp()
self._login() }, label: {
}, label: { Text("Sign up")
Text("Sign up") })
}) Button(action: {
.frame(maxWidth: .infinity) self._forgottenPassword()
Button(action: { }, label: {
self._login() Text("Forgotten password")
}, label: { })
Text("Forgotten password")
})
.frame(maxWidth: .infinity)
}
} }
} }
.navigationTitle("Login") .navigationTitle("Login")
@ -62,18 +76,29 @@ struct LoginView: View {
} }
Task { Task {
do { do {
let _: User = try await service.login( let user: User = try await service.login(
username: self.username, username: self.username,
password: self.password) password: self.password)
self.dataStore.setUser(user)
self.handler(user)
} catch { } catch {
Logger.error(error) Logger.error(error)
} }
} }
}
fileprivate func _signUp() {
} }
fileprivate func _forgottenPassword() {
// Store.main.service?.forgotPassword(user: <#T##UserBase#>)
}
} }
#Preview { #Preview {
LoginView() NavigationStack {
LoginView(handler: { _ in })
}
} }

@ -10,15 +10,14 @@ import LeStorage
struct MainUserView: View { struct MainUserView: View {
@EnvironmentObject var dataStore: DataStore
var body: some View { var body: some View {
if let user = dataStore.user, Store.main.hasToken() {
// if let user = , Store.main.hasToken() { AccountView(user: user)
// AccountView(user: user) } else {
// } else { LoginAccountView()
// LoginView() }
// }
Text("test")
} }
} }

@ -9,6 +9,7 @@ import Foundation
import LeStorage import LeStorage
class User: UserBase { class User: UserBase {
public var id: String = Store.randomId() public var id: String = Store.randomId()
public var username: String public var username: String
public var email: String? public var email: String?

Loading…
Cancel
Save