diff --git a/yobble/Resources/Localizable.xcstrings b/yobble/Resources/Localizable.xcstrings index 35910c6..d4f5d62 100644 --- a/yobble/Resources/Localizable.xcstrings +++ b/yobble/Resources/Localizable.xcstrings @@ -529,6 +529,9 @@ } } } + }, + "Если забыли пароль, воспользуйтесь входом по коду — это позволит попасть в аккаунт без пароля и уже там сменить его в настройках. Скоро появится полноценный сброс." : { + }, "Если не нашли ответ, напишите нам своё предложение или проблему." : { "comment" : "FAQ: contact developers footer", @@ -549,6 +552,9 @@ }, "Заблокировать контакт" : { "comment" : "Contacts context action block" + }, + "Забыли пароль? Сбросить" : { + }, "Завершить" : { "comment" : "Кнопка завершения конкретной сессии\nПодтверждение завершения других сессий\nПодтверждение завершения конкретной сессии" @@ -1762,6 +1768,9 @@ }, "Перейдите в раздел \"Настройки > Сменить пароль\" и следуйте инструкциям." : { "comment" : "FAQ answer: reset password" + }, + "Перейти к входу по коду" : { + }, "По умолчанию это полноценная соцсеть с лентой, историями и подписками. Если нужно только общение без лишнего контента, переключитесь на режим “Только чаты”. Переключить режим можно в любой момент." : { @@ -2300,6 +2309,9 @@ } } } + }, + "Сброс пароля" : { + }, "Сбросить по умолчанию" : { "localizations" : { diff --git a/yobble/Views/Login/LoginView.swift b/yobble/Views/Login/LoginView.swift index 6a2f652..f480980 100644 --- a/yobble/Views/Login/LoginView.swift +++ b/yobble/Views/Login/LoginView.swift @@ -83,6 +83,7 @@ struct PasswordLoginView: View { @State private var showLegacySupportNotice = false @State private var isShowingTerms = false @State private var hasResetTermsOnAppear = false + @State private var isShowingForgotPassword = false @FocusState private var focusedField: Field? private enum Field: Hashable { @@ -199,12 +200,9 @@ struct PasswordLoginView: View { .disabled(!isLoginButtonEnabled) Button(action: { - viewModel.hasAcceptedTerms = false - withAnimation { - viewModel.showRegistration() - } + isShowingForgotPassword = true }) { - Text(NSLocalizedString("Нет аккаунта? Регистрация", comment: "Регистрация")) + Text(NSLocalizedString("Забыли пароль? Сбросить", comment: "")) .foregroundColor(.blue) .frame(maxWidth: .infinity) } @@ -253,6 +251,16 @@ struct PasswordLoginView: View { .transition(.opacity) } } + .sheet(isPresented: $isShowingForgotPassword) { + ForgotPasswordInfoView { + isShowingForgotPassword = false + withAnimation { + viewModel.showPasswordlessRequest() + } + } onDismiss: { + isShowingForgotPassword = false + } + } } private var themeIconName: String { switch themeManager.theme { @@ -792,3 +800,39 @@ struct LoginView_Previews: PreviewProvider { 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) + } + } +}