I am use firebase for my SwiftUI App, and I want to register with mail, but when I typing my mail it is throw an error like
Oops! Something went wrong. Please try again.
I do not know why? here is my code:
StatusViewModel:
class StatusViewModel: Identifiable, ObservableObject {
var title: String
var message: String
init(title: String = "", message: String = "") {
self.title = title
self.message = message
}
static var signUpSuccessStatus: StatusViewModel {
return StatusViewModel(title: "Successful", message: "Your account has been created successfully")
}
static var logInSuccessStatus: StatusViewModel {
return StatusViewModel(title: "Successful", message: "Your account has been logged in successfully")
}
static var errorStatus: StatusViewModel {
return StatusViewModel(title: "Error", message: "Oops! Something went wrong. Please try again.")
}
}
RegisterViewModel:
import Foundation
import Combine
class RegisterViewModel: ObservableObject {
@Published var email: String = ""
@Published var password: String = ""
@Published var statusViewModel: StatusViewModel?
@Published var state: AppState
private var cancellableBag = Set<AnyCancellable>()
private let authAPI: AuthAPI
init(authAPI: AuthAPI, state: AppState) {
self.authAPI = authAPI
self.state = state
}
func signUp() {
authAPI.signUp(email: email, password: password)
.receive(on: RunLoop.main)
.map(resultMapper)
.replaceError(with: StatusViewModel.errorStatus)
.assign(to: \.statusViewModel, on: self)
.store(in: &cancellableBag)
}
}
extension RegisterViewModel {
private func resultMapper(with user: User?) -> StatusViewModel {
if user != nil {
state.currentUser = user
return StatusViewModel.signUpSuccessStatus
} else {
return StatusViewModel.errorStatus
}
}
}
struct Register: View {
@ObservedObject private var viewModel: RegisterViewModel
@State var pushActive = false
init(state: AppState) {
self.viewModel = RegisterViewModel(authAPI: AuthService(), state: state)
}
var body: some View {
NavigationLink(destination: HomeView(state: viewModel.state),
isActive: self.$pushActive) {
Button {
self.viewModel.signUp()
} label: {
Text("Register")
.padding()
}
}
}
}