From ab5218f02a3316673e38ae10e2704574f33125a1 Mon Sep 17 00:00:00 2001 From: cheykrym Date: Tue, 7 Oct 2025 01:03:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=B3=D0=BB=D0=B0=D0=B7=D0=B8=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tab/Settings/ChangePasswordView.swift | 75 +++++++++++++++++-- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/yobble/Views/Tab/Settings/ChangePasswordView.swift b/yobble/Views/Tab/Settings/ChangePasswordView.swift index 936000a..600fbbf 100644 --- a/yobble/Views/Tab/Settings/ChangePasswordView.swift +++ b/yobble/Views/Tab/Settings/ChangePasswordView.swift @@ -6,6 +6,9 @@ struct ChangePasswordView: View { @State private var oldPassword = "" @State private var newPassword = "" @State private var confirmPassword = "" + @State private var isOldPasswordVisible = false + @State private var isNewPasswordVisible = false + @State private var isConfirmPasswordVisible = false private var isOldPasswordValid: Bool { return oldPassword.count >= 8 && oldPassword.count <= 128 @@ -28,8 +31,28 @@ struct ChangePasswordView: View { Section { HStack { - SecureField(NSLocalizedString("Старый пароль", comment: "Старый пароль"), text: $oldPassword) - .autocapitalization(.none) + if isOldPasswordVisible { + TextField(NSLocalizedString("Старый пароль", comment: "Старый пароль"), text: $oldPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.password) + .frame(maxWidth: .infinity, alignment: .leading) + } else { + SecureField(NSLocalizedString("Старый пароль", comment: "Старый пароль"), text: $oldPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.password) + .frame(maxWidth: .infinity, alignment: .leading) + } + + Button(action: { + isOldPasswordVisible.toggle() + }) { + Image(systemName: isOldPasswordVisible ? "eye.slash" : "eye") + .foregroundColor(.gray) + } + .buttonStyle(PlainButtonStyle()) + .padding(.horizontal, 4) if !oldPassword.isEmpty { Image(systemName: isOldPasswordValid ? "checkmark.circle" : "xmark.circle") @@ -38,9 +61,29 @@ struct ChangePasswordView: View { } HStack { - SecureField(NSLocalizedString("Новый пароль", comment: "Новый пароль"), text: $newPassword) - .autocapitalization(.none) + if isNewPasswordVisible { + TextField(NSLocalizedString("Новый пароль", comment: "Новый пароль"), text: $newPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.newPassword) + .frame(maxWidth: .infinity, alignment: .leading) + } else { + SecureField(NSLocalizedString("Новый пароль", comment: "Новый пароль"), text: $newPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.newPassword) + .frame(maxWidth: .infinity, alignment: .leading) + } + Button(action: { + isNewPasswordVisible.toggle() + }) { + Image(systemName: isNewPasswordVisible ? "eye.slash" : "eye") + .foregroundColor(.gray) + } + .buttonStyle(PlainButtonStyle()) + .padding(.horizontal, 4) + if !newPassword.isEmpty { let isAllValid = isNewPasswordValid && !isOldPasswordSame @@ -50,9 +93,29 @@ struct ChangePasswordView: View { } HStack { - SecureField(NSLocalizedString("Подтверждение пароля", comment: "Подтверждение пароля"), text: $confirmPassword) - .autocapitalization(.none) + if isConfirmPasswordVisible { + TextField(NSLocalizedString("Подтверждение пароля", comment: "Подтверждение пароля"), text: $confirmPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.password) + .frame(maxWidth: .infinity, alignment: .leading) + } else { + SecureField(NSLocalizedString("Подтверждение пароля", comment: "Подтверждение пароля"), text: $confirmPassword) + .autocapitalization(.none) + .disableAutocorrection(true) + .textContentType(.password) + .frame(maxWidth: .infinity, alignment: .leading) + } + Button(action: { + isConfirmPasswordVisible.toggle() + }) { + Image(systemName: isConfirmPasswordVisible ? "eye.slash" : "eye") + .foregroundColor(.gray) + } + .buttonStyle(PlainButtonStyle()) + .padding(.horizontal, 4) + if !confirmPassword.isEmpty { Image(systemName: isPasswordConfirmValid ? "checkmark.circle" : "xmark.circle") .foregroundColor(isPasswordConfirmValid ? .green : .red)