update tob bar
This commit is contained in:
parent
a9aa891f19
commit
c09858dfbd
@ -2296,6 +2296,9 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Режим" : {
|
||||
|
||||
},
|
||||
"Режим мессенжера" : {
|
||||
|
||||
|
||||
@ -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) }) {
|
||||
|
||||
@ -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: ""))
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user