@page "/profile/password" @using System.ComponentModel.DataAnnotations @using MudBlazor @using Indotalent.Features.Profile.Password @using Indotalent.Features.Profile.Password.Cqrs @using Indotalent.ConfigBackEnd.Interfaces @using Indotalent.Shared.Utils @inject ISnackbar Snackbar @inject PasswordService PasswordService @inject ICurrentUserService CurrentUserService Security Settings Manage your password and protect your account security. / Profile / Password Change Password Update your password to keep your account secure. We recommend using a strong password. Current Password New Password Confirm New Password @if (_isProcessing) { Updating Password... } else { Update Password } @code { private MudForm _form = default!; private UpdatePasswordValidator _validator = new(); private bool _isProcessing = false; private PasswordChangeModel _model = new(); private bool _currentPasswordVisibility; private InputType _currentPasswordInput = InputType.Password; private string _currentPasswordIcon = Icons.Material.Filled.VisibilityOff; private bool _newPasswordVisibility; private InputType _newPasswordInput = InputType.Password; private string _newPasswordIcon = Icons.Material.Filled.VisibilityOff; private void ToggleCurrentPasswordVisibility() { if (_currentPasswordVisibility) { _currentPasswordVisibility = false; _currentPasswordIcon = Icons.Material.Filled.VisibilityOff; _currentPasswordInput = InputType.Password; } else { _currentPasswordVisibility = true; _currentPasswordIcon = Icons.Material.Filled.Visibility; _currentPasswordInput = InputType.Text; } } private void ToggleNewPasswordVisibility() { if (_newPasswordVisibility) { _newPasswordVisibility = false; _newPasswordIcon = Icons.Material.Filled.VisibilityOff; _newPasswordInput = InputType.Password; } else { _newPasswordVisibility = true; _newPasswordIcon = Icons.Material.Filled.Visibility; _newPasswordInput = InputType.Text; } } private async Task UpdatePassword() { await _form.Validate(); if (!_form.IsValid) { Snackbar.Add("Please correct the validation errors.", Severity.Warning); return; } if (_model.NewPassword != _model.ConfirmPassword) { Snackbar.Add("New password and confirmation do not match.", Severity.Error); return; } var userId = CurrentUserService.UserId; if (string.IsNullOrEmpty(userId)) { Snackbar.Add("User session not found.", Severity.Error); return; } _isProcessing = true; var request = new UpdatePasswordRequest { Id = userId, CurrentPassword = _model.CurrentPassword, NewPassword = _model.NewPassword }; var response = await PasswordService.UpdatePasswordAsync(request); await Task.Delay(500); if (response != null && response.IsSuccess) { Snackbar.Add("Password updated successfully!", Severity.Success); _model = new PasswordChangeModel(); await _form.ResetAsync(); } else { Snackbar.Add(response?.Message ?? "Failed to update password", Severity.Error); } _isProcessing = false; } public class PasswordChangeModel : UpdatePasswordRequest { public string ConfirmPassword { get; set; } = string.Empty; } }