reset password

This commit is contained in:
cheykrym 2025-12-03 07:51:31 +03:00
parent 97951cc748
commit a4102f7890
2 changed files with 61 additions and 5 deletions

View File

@ -529,6 +529,9 @@
} }
} }
} }
},
"Если забыли пароль, воспользуйтесь входом по коду — это позволит попасть в аккаунт без пароля и уже там сменить его в настройках. Скоро появится полноценный сброс." : {
}, },
"Если не нашли ответ, напишите нам своё предложение или проблему." : { "Если не нашли ответ, напишите нам своё предложение или проблему." : {
"comment" : "FAQ: contact developers footer", "comment" : "FAQ: contact developers footer",
@ -549,6 +552,9 @@
}, },
"Заблокировать контакт" : { "Заблокировать контакт" : {
"comment" : "Contacts context action block" "comment" : "Contacts context action block"
},
"Забыли пароль? Сбросить" : {
}, },
"Завершить" : { "Завершить" : {
"comment" : "Кнопка завершения конкретной сессии\nПодтверждение завершения других сессий\nПодтверждение завершения конкретной сессии" "comment" : "Кнопка завершения конкретной сессии\nПодтверждение завершения других сессий\nПодтверждение завершения конкретной сессии"
@ -1762,6 +1768,9 @@
}, },
"Перейдите в раздел \"Настройки > Сменить пароль\" и следуйте инструкциям." : { "Перейдите в раздел \"Настройки > Сменить пароль\" и следуйте инструкциям." : {
"comment" : "FAQ answer: reset password" "comment" : "FAQ answer: reset password"
},
"Перейти к входу по коду" : {
}, },
"По умолчанию это полноценная соцсеть с лентой, историями и подписками. Если нужно только общение без лишнего контента, переключитесь на режим “Только чаты”. Переключить режим можно в любой момент." : { "По умолчанию это полноценная соцсеть с лентой, историями и подписками. Если нужно только общение без лишнего контента, переключитесь на режим “Только чаты”. Переключить режим можно в любой момент." : {
@ -2300,6 +2309,9 @@
} }
} }
} }
},
"Сброс пароля" : {
}, },
"Сбросить по умолчанию" : { "Сбросить по умолчанию" : {
"localizations" : { "localizations" : {

View File

@ -83,6 +83,7 @@ struct PasswordLoginView: View {
@State private var showLegacySupportNotice = false @State private var showLegacySupportNotice = false
@State private var isShowingTerms = false @State private var isShowingTerms = false
@State private var hasResetTermsOnAppear = false @State private var hasResetTermsOnAppear = false
@State private var isShowingForgotPassword = false
@FocusState private var focusedField: Field? @FocusState private var focusedField: Field?
private enum Field: Hashable { private enum Field: Hashable {
@ -199,12 +200,9 @@ struct PasswordLoginView: View {
.disabled(!isLoginButtonEnabled) .disabled(!isLoginButtonEnabled)
Button(action: { Button(action: {
viewModel.hasAcceptedTerms = false isShowingForgotPassword = true
withAnimation {
viewModel.showRegistration()
}
}) { }) {
Text(NSLocalizedString("Нет аккаунта? Регистрация", comment: "Регистрация")) Text(NSLocalizedString("Забыли пароль? Сбросить", comment: ""))
.foregroundColor(.blue) .foregroundColor(.blue)
.frame(maxWidth: .infinity) .frame(maxWidth: .infinity)
} }
@ -253,6 +251,16 @@ struct PasswordLoginView: View {
.transition(.opacity) .transition(.opacity)
} }
} }
.sheet(isPresented: $isShowingForgotPassword) {
ForgotPasswordInfoView {
isShowingForgotPassword = false
withAnimation {
viewModel.showPasswordlessRequest()
}
} onDismiss: {
isShowingForgotPassword = false
}
}
} }
private var themeIconName: String { private var themeIconName: String {
switch themeManager.theme { switch themeManager.theme {
@ -792,3 +800,39 @@ struct LoginView_Previews: PreviewProvider {
return LoginView(viewModel: viewModel) return LoginView(viewModel: viewModel)
} }
} }
private struct ForgotPasswordInfoView: View {
let onUseCode: () -> Void
let onDismiss: () -> Void
var body: some View {
NavigationView {
VStack(alignment: .leading, spacing: 16) {
Text(NSLocalizedString("Сброс пароля", comment: ""))
.font(.title2.bold())
Text(NSLocalizedString("Если забыли пароль, воспользуйтесь входом по коду — это позволит попасть в аккаунт без пароля и уже там сменить его в настройках. Скоро появится полноценный сброс.", comment: ""))
.foregroundColor(.secondary)
Button(action: onUseCode) {
Text(NSLocalizedString("Перейти к входу по коду", comment: ""))
.foregroundColor(.white)
.frame(maxWidth: .infinity)
.padding()
.background(Color.accentColor)
.cornerRadius(12)
}
Button(action: onDismiss) {
Text(NSLocalizedString("Закрыть", comment: ""))
.frame(maxWidth: .infinity)
.padding()
}
Spacer()
}
.padding()
.navigationBarHidden(true)
}
}
}