60 lines
1.6 KiB
Swift
60 lines
1.6 KiB
Swift
//
|
|
// AddBasicInfoViewModel.swift
|
|
// nirvana-ios
|
|
//
|
|
// Created by Arjun Patel on 12/19/21.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
enum ProfileRegistrationState {
|
|
case successful
|
|
case failed(String)
|
|
case loading
|
|
case na
|
|
}
|
|
|
|
class AddBasicInfoViewModel : ObservableObject {
|
|
@Published var state: ProfileRegistrationState = .na
|
|
private var firestoreService = FirestoreService()
|
|
|
|
// - get user data current data
|
|
// - save user selections
|
|
func updateUser(currUser: User, completion: @escaping () -> Void) {
|
|
// validations
|
|
// make sure nickname is less than 25 characters for now
|
|
|
|
self.state = .loading
|
|
|
|
if currUser.nickname == nil || currUser.avatar == nil {
|
|
self.state = .failed("Please make sure to select avatar and nickname 🙏")
|
|
completion()
|
|
return
|
|
}
|
|
if currUser.nickname!.count > 25 {
|
|
self.state = .failed("Please use a simpler nickname less than 25 characters 🙏")
|
|
completion()
|
|
return
|
|
}
|
|
if !Avatars.avatarSystemNames.contains(currUser.avatar!) {
|
|
self.state = .failed("Invalid avatar selected!")
|
|
completion()
|
|
return
|
|
}
|
|
|
|
// save in firestore
|
|
self.firestoreService.updateUser(user: currUser) {res in
|
|
print(res)
|
|
|
|
switch res {
|
|
case .success:
|
|
self.state = .successful
|
|
case .error(let error):
|
|
self.state = .failed(error.description)
|
|
}
|
|
|
|
completion()
|
|
}
|
|
}
|
|
}
|