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 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() {
let store = Store.main
store.synchronizationApiURL = "http://127.0.0.1:8000/api/"

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

@ -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()
}
}

@ -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 })
}
}

@ -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()
}
}
}

@ -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?

Loading…
Cancel
Save