update tob bar

This commit is contained in:
cheykrym 2025-12-03 08:00:29 +03:00
parent a9aa891f19
commit c09858dfbd
4 changed files with 45 additions and 13 deletions

View File

@ -2296,6 +2296,9 @@
}
}
}
},
"Режим" : {
},
"Режим мессенжера" : {

View File

@ -2,6 +2,7 @@ import SwiftUI
struct LoginTopBar: View {
let openLanguageSettings: () -> Void
let onShowModePrompt: (() -> Void)?
@EnvironmentObject private var themeManager: ThemeManager
@Environment(\.colorScheme) private var colorScheme
private let themeOptions = ThemeOption.ordered
@ -13,6 +14,13 @@ struct LoginTopBar: View {
.padding(8)
}
Spacer()
if let onShowModePrompt {
Button(action: onShowModePrompt) {
Text(NSLocalizedString("Режим", comment: ""))
.font(.footnote.bold())
}
Spacer()
}
Menu {
ForEach(themeOptions) { option in
Button(action: { selectTheme(option) }) {

View File

@ -35,10 +35,7 @@ struct LoginView: View {
}
}
.onAppear {
pendingMessengerMode = isMessengerModeEnabled
withAnimation {
isShowingMessengerPrompt = true
}
showModePrompt()
}
}
@ -46,21 +43,36 @@ struct LoginView: View {
ZStack {
switch viewModel.loginFlowStep {
case .passwordlessRequest:
PasswordlessRequestView(viewModel: viewModel, shouldAutofocus: !isShowingMessengerPrompt)
PasswordlessRequestView(
viewModel: viewModel,
shouldAutofocus: !isShowingMessengerPrompt,
onShowModePrompt: showModePrompt
)
.transition(.move(edge: .trailing).combined(with: .opacity))
case .passwordlessVerify:
PasswordlessVerifyView(viewModel: viewModel, shouldAutofocus: !isShowingMessengerPrompt)
PasswordlessVerifyView(
viewModel: viewModel,
shouldAutofocus: !isShowingMessengerPrompt,
onShowModePrompt: showModePrompt
)
.transition(.move(edge: .leading).combined(with: .opacity))
case .password:
PasswordLoginView(viewModel: viewModel)
PasswordLoginView(viewModel: viewModel, onShowModePrompt: showModePrompt)
.transition(.opacity)
case .registration:
RegistrationView(viewModel: viewModel)
RegistrationView(viewModel: viewModel, onShowModePrompt: showModePrompt)
.transition(.move(edge: .bottom).combined(with: .opacity))
}
}
}
private func showModePrompt() {
pendingMessengerMode = isMessengerModeEnabled
withAnimation {
isShowingMessengerPrompt = true
}
}
private func applyMessengerModeSelection() {
isMessengerModeEnabled = pendingMessengerMode
dismissMessengerPrompt()
@ -75,6 +87,7 @@ struct LoginView: View {
struct PasswordLoginView: View {
@ObservedObject var viewModel: LoginViewModel
let onShowModePrompt: () -> Void
@EnvironmentObject private var themeManager: ThemeManager
@Environment(\.colorScheme) private var colorScheme
private let themeOptions = ThemeOption.ordered
@ -108,7 +121,7 @@ struct PasswordLoginView: View {
var body: some View {
ScrollView(showsIndicators: false) {
VStack(alignment: .leading, spacing: 24) {
LoginTopBar(openLanguageSettings: openLanguageSettings)
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
Button {
focusedField = nil
@ -366,12 +379,13 @@ struct PasswordLoginView: View {
private struct PasswordlessRequestView: View {
@ObservedObject var viewModel: LoginViewModel
let shouldAutofocus: Bool
let onShowModePrompt: () -> Void
@FocusState private var isFieldFocused: Bool
var body: some View {
ScrollView(showsIndicators: false) {
VStack(alignment: .leading, spacing: 24) {
LoginTopBar(openLanguageSettings: openLanguageSettings)
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
VStack(alignment: .leading, spacing: 8) {
Text(NSLocalizedString("Вход", comment: ""))
@ -502,12 +516,13 @@ private struct PasswordlessRequestView: View {
private struct PasswordlessVerifyView: View {
@ObservedObject var viewModel: LoginViewModel
let shouldAutofocus: Bool
let onShowModePrompt: () -> Void
@FocusState private var isCodeFieldFocused: Bool
var body: some View {
ScrollView(showsIndicators: false) {
VStack(alignment: .leading, spacing: 24) {
LoginTopBar(openLanguageSettings: openLanguageSettings)
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
VStack(alignment: .leading, spacing: 8) {
Text(NSLocalizedString("Введите код", comment: ""))

View File

@ -9,6 +9,7 @@ import SwiftUI
struct RegistrationView: View {
@ObservedObject var viewModel: LoginViewModel
let onShowModePrompt: (() -> Void)?
@State private var username: String = ""
@State private var password: String = ""
@ -46,10 +47,15 @@ struct RegistrationView: View {
isUsernameValid && isPasswordValid && isConfirmPasswordValid && viewModel.hasAcceptedTerms
}
init(viewModel: LoginViewModel, onShowModePrompt: (() -> Void)? = nil) {
self._viewModel = ObservedObject(initialValue: viewModel)
self.onShowModePrompt = onShowModePrompt
}
var body: some View {
ScrollView(showsIndicators: false) {
VStack(alignment: .leading, spacing: 24) {
LoginTopBar(openLanguageSettings: openLanguageSettings)
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
Button(action: goBack) {
HStack(spacing: 6) {
@ -227,6 +233,6 @@ struct RegistrationView_Previews: PreviewProvider {
static var previews: some View {
let viewModel = LoginViewModel()
viewModel.isLoading = false // чтобы убрать спиннер
return RegistrationView(viewModel: viewModel)
return RegistrationView(viewModel: viewModel, onShowModePrompt: nil)
}
}