ios_client
This commit is contained in:
98
ios_client 0.8.5/Kecalek/ViewModels/ProfileViewModel.swift
Normal file
98
ios_client 0.8.5/Kecalek/ViewModels/ProfileViewModel.swift
Normal file
@@ -0,0 +1,98 @@
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
@Observable
|
||||
final class ProfileViewModel {
|
||||
var profile: UserProfile?
|
||||
var avatarData: Data?
|
||||
var isLoading = false
|
||||
var isSaving = false
|
||||
var errorMessage: String?
|
||||
|
||||
// Editable fields
|
||||
var phone = ""
|
||||
var phoneVisible = false
|
||||
var location = ""
|
||||
var locationVisible = false
|
||||
|
||||
func loadProfile(userId: String? = nil, chatClient: ChatClient) async {
|
||||
isLoading = true
|
||||
profile = await chatClient.getProfile(userId: userId)
|
||||
isLoading = false
|
||||
|
||||
if let p = profile {
|
||||
phone = p.phone ?? ""
|
||||
phoneVisible = p.phoneVisible
|
||||
location = p.location ?? ""
|
||||
locationVisible = p.locationVisible
|
||||
}
|
||||
|
||||
// Load avatar
|
||||
let clientUserId = await chatClient.userId
|
||||
let uid = userId ?? clientUserId ?? ""
|
||||
if !uid.isEmpty {
|
||||
avatarData = await chatClient.getAvatar(userId: uid)
|
||||
}
|
||||
}
|
||||
|
||||
@discardableResult
|
||||
func saveProfile(chatClient: ChatClient) async -> Bool {
|
||||
isSaving = true
|
||||
errorMessage = nil
|
||||
|
||||
let success = await chatClient.updateProfile(
|
||||
phone: phone.isEmpty ? nil : phone,
|
||||
phoneVisible: phoneVisible,
|
||||
location: location.isEmpty ? nil : location,
|
||||
locationVisible: locationVisible
|
||||
)
|
||||
|
||||
isSaving = false
|
||||
|
||||
if !success {
|
||||
errorMessage = "Failed to update profile"
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
func uploadAvatar(imageData: Data, chatClient: ChatClient) async {
|
||||
isSaving = true
|
||||
errorMessage = nil
|
||||
let (success, msg) = await chatClient.updateAvatar(imageData: imageData)
|
||||
isSaving = false
|
||||
|
||||
if success {
|
||||
// Reload avatar from server (it was resized/compressed)
|
||||
let clientUserId = await chatClient.userId ?? ""
|
||||
avatarData = await chatClient.getAvatar(userId: clientUserId)
|
||||
} else {
|
||||
errorMessage = msg.isEmpty ? "Failed to upload avatar" : msg
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Username Change
|
||||
|
||||
func changeUsername(newUsername: String, chatClient: ChatClient) async -> Bool {
|
||||
isSaving = true
|
||||
errorMessage = nil
|
||||
let (success, msg) = await chatClient.changeUsername(newUsername: newUsername)
|
||||
isSaving = false
|
||||
if !success {
|
||||
errorMessage = msg
|
||||
}
|
||||
return success
|
||||
}
|
||||
|
||||
// MARK: - Password Change
|
||||
|
||||
func changePassword(oldPassword: String, newPassword: String, chatClient: ChatClient) async -> Bool {
|
||||
isSaving = true
|
||||
errorMessage = nil
|
||||
let (success, msg) = await chatClient.changePassword(oldPassword: oldPassword, newPassword: newPassword)
|
||||
isSaving = false
|
||||
if !success {
|
||||
errorMessage = msg
|
||||
}
|
||||
return success
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user