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 {
|
struct LoginTopBar: View {
|
||||||
let openLanguageSettings: () -> Void
|
let openLanguageSettings: () -> Void
|
||||||
|
let onShowModePrompt: (() -> Void)?
|
||||||
@EnvironmentObject private var themeManager: ThemeManager
|
@EnvironmentObject private var themeManager: ThemeManager
|
||||||
@Environment(\.colorScheme) private var colorScheme
|
@Environment(\.colorScheme) private var colorScheme
|
||||||
private let themeOptions = ThemeOption.ordered
|
private let themeOptions = ThemeOption.ordered
|
||||||
@ -13,6 +14,13 @@ struct LoginTopBar: View {
|
|||||||
.padding(8)
|
.padding(8)
|
||||||
}
|
}
|
||||||
Spacer()
|
Spacer()
|
||||||
|
if let onShowModePrompt {
|
||||||
|
Button(action: onShowModePrompt) {
|
||||||
|
Text(NSLocalizedString("Режим", comment: ""))
|
||||||
|
.font(.footnote.bold())
|
||||||
|
}
|
||||||
|
Spacer()
|
||||||
|
}
|
||||||
Menu {
|
Menu {
|
||||||
ForEach(themeOptions) { option in
|
ForEach(themeOptions) { option in
|
||||||
Button(action: { selectTheme(option) }) {
|
Button(action: { selectTheme(option) }) {
|
||||||
|
|||||||
@ -35,10 +35,7 @@ struct LoginView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onAppear {
|
.onAppear {
|
||||||
pendingMessengerMode = isMessengerModeEnabled
|
showModePrompt()
|
||||||
withAnimation {
|
|
||||||
isShowingMessengerPrompt = true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,21 +43,36 @@ struct LoginView: View {
|
|||||||
ZStack {
|
ZStack {
|
||||||
switch viewModel.loginFlowStep {
|
switch viewModel.loginFlowStep {
|
||||||
case .passwordlessRequest:
|
case .passwordlessRequest:
|
||||||
PasswordlessRequestView(viewModel: viewModel, shouldAutofocus: !isShowingMessengerPrompt)
|
PasswordlessRequestView(
|
||||||
|
viewModel: viewModel,
|
||||||
|
shouldAutofocus: !isShowingMessengerPrompt,
|
||||||
|
onShowModePrompt: showModePrompt
|
||||||
|
)
|
||||||
.transition(.move(edge: .trailing).combined(with: .opacity))
|
.transition(.move(edge: .trailing).combined(with: .opacity))
|
||||||
case .passwordlessVerify:
|
case .passwordlessVerify:
|
||||||
PasswordlessVerifyView(viewModel: viewModel, shouldAutofocus: !isShowingMessengerPrompt)
|
PasswordlessVerifyView(
|
||||||
|
viewModel: viewModel,
|
||||||
|
shouldAutofocus: !isShowingMessengerPrompt,
|
||||||
|
onShowModePrompt: showModePrompt
|
||||||
|
)
|
||||||
.transition(.move(edge: .leading).combined(with: .opacity))
|
.transition(.move(edge: .leading).combined(with: .opacity))
|
||||||
case .password:
|
case .password:
|
||||||
PasswordLoginView(viewModel: viewModel)
|
PasswordLoginView(viewModel: viewModel, onShowModePrompt: showModePrompt)
|
||||||
.transition(.opacity)
|
.transition(.opacity)
|
||||||
case .registration:
|
case .registration:
|
||||||
RegistrationView(viewModel: viewModel)
|
RegistrationView(viewModel: viewModel, onShowModePrompt: showModePrompt)
|
||||||
.transition(.move(edge: .bottom).combined(with: .opacity))
|
.transition(.move(edge: .bottom).combined(with: .opacity))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func showModePrompt() {
|
||||||
|
pendingMessengerMode = isMessengerModeEnabled
|
||||||
|
withAnimation {
|
||||||
|
isShowingMessengerPrompt = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private func applyMessengerModeSelection() {
|
private func applyMessengerModeSelection() {
|
||||||
isMessengerModeEnabled = pendingMessengerMode
|
isMessengerModeEnabled = pendingMessengerMode
|
||||||
dismissMessengerPrompt()
|
dismissMessengerPrompt()
|
||||||
@ -75,6 +87,7 @@ struct LoginView: View {
|
|||||||
|
|
||||||
struct PasswordLoginView: View {
|
struct PasswordLoginView: View {
|
||||||
@ObservedObject var viewModel: LoginViewModel
|
@ObservedObject var viewModel: LoginViewModel
|
||||||
|
let onShowModePrompt: () -> Void
|
||||||
@EnvironmentObject private var themeManager: ThemeManager
|
@EnvironmentObject private var themeManager: ThemeManager
|
||||||
@Environment(\.colorScheme) private var colorScheme
|
@Environment(\.colorScheme) private var colorScheme
|
||||||
private let themeOptions = ThemeOption.ordered
|
private let themeOptions = ThemeOption.ordered
|
||||||
@ -108,7 +121,7 @@ struct PasswordLoginView: View {
|
|||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView(showsIndicators: false) {
|
ScrollView(showsIndicators: false) {
|
||||||
VStack(alignment: .leading, spacing: 24) {
|
VStack(alignment: .leading, spacing: 24) {
|
||||||
LoginTopBar(openLanguageSettings: openLanguageSettings)
|
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
focusedField = nil
|
focusedField = nil
|
||||||
@ -366,12 +379,13 @@ struct PasswordLoginView: View {
|
|||||||
private struct PasswordlessRequestView: View {
|
private struct PasswordlessRequestView: View {
|
||||||
@ObservedObject var viewModel: LoginViewModel
|
@ObservedObject var viewModel: LoginViewModel
|
||||||
let shouldAutofocus: Bool
|
let shouldAutofocus: Bool
|
||||||
|
let onShowModePrompt: () -> Void
|
||||||
@FocusState private var isFieldFocused: Bool
|
@FocusState private var isFieldFocused: Bool
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView(showsIndicators: false) {
|
ScrollView(showsIndicators: false) {
|
||||||
VStack(alignment: .leading, spacing: 24) {
|
VStack(alignment: .leading, spacing: 24) {
|
||||||
LoginTopBar(openLanguageSettings: openLanguageSettings)
|
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
|
||||||
|
|
||||||
VStack(alignment: .leading, spacing: 8) {
|
VStack(alignment: .leading, spacing: 8) {
|
||||||
Text(NSLocalizedString("Вход", comment: ""))
|
Text(NSLocalizedString("Вход", comment: ""))
|
||||||
@ -502,12 +516,13 @@ private struct PasswordlessRequestView: View {
|
|||||||
private struct PasswordlessVerifyView: View {
|
private struct PasswordlessVerifyView: View {
|
||||||
@ObservedObject var viewModel: LoginViewModel
|
@ObservedObject var viewModel: LoginViewModel
|
||||||
let shouldAutofocus: Bool
|
let shouldAutofocus: Bool
|
||||||
|
let onShowModePrompt: () -> Void
|
||||||
@FocusState private var isCodeFieldFocused: Bool
|
@FocusState private var isCodeFieldFocused: Bool
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView(showsIndicators: false) {
|
ScrollView(showsIndicators: false) {
|
||||||
VStack(alignment: .leading, spacing: 24) {
|
VStack(alignment: .leading, spacing: 24) {
|
||||||
LoginTopBar(openLanguageSettings: openLanguageSettings)
|
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
|
||||||
|
|
||||||
VStack(alignment: .leading, spacing: 8) {
|
VStack(alignment: .leading, spacing: 8) {
|
||||||
Text(NSLocalizedString("Введите код", comment: ""))
|
Text(NSLocalizedString("Введите код", comment: ""))
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import SwiftUI
|
|||||||
|
|
||||||
struct RegistrationView: View {
|
struct RegistrationView: View {
|
||||||
@ObservedObject var viewModel: LoginViewModel
|
@ObservedObject var viewModel: LoginViewModel
|
||||||
|
let onShowModePrompt: (() -> Void)?
|
||||||
|
|
||||||
@State private var username: String = ""
|
@State private var username: String = ""
|
||||||
@State private var password: String = ""
|
@State private var password: String = ""
|
||||||
@ -46,10 +47,15 @@ struct RegistrationView: View {
|
|||||||
isUsernameValid && isPasswordValid && isConfirmPasswordValid && viewModel.hasAcceptedTerms
|
isUsernameValid && isPasswordValid && isConfirmPasswordValid && viewModel.hasAcceptedTerms
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init(viewModel: LoginViewModel, onShowModePrompt: (() -> Void)? = nil) {
|
||||||
|
self._viewModel = ObservedObject(initialValue: viewModel)
|
||||||
|
self.onShowModePrompt = onShowModePrompt
|
||||||
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ScrollView(showsIndicators: false) {
|
ScrollView(showsIndicators: false) {
|
||||||
VStack(alignment: .leading, spacing: 24) {
|
VStack(alignment: .leading, spacing: 24) {
|
||||||
LoginTopBar(openLanguageSettings: openLanguageSettings)
|
LoginTopBar(openLanguageSettings: openLanguageSettings, onShowModePrompt: onShowModePrompt)
|
||||||
|
|
||||||
Button(action: goBack) {
|
Button(action: goBack) {
|
||||||
HStack(spacing: 6) {
|
HStack(spacing: 6) {
|
||||||
@ -227,6 +233,6 @@ struct RegistrationView_Previews: PreviewProvider {
|
|||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
let viewModel = LoginViewModel()
|
let viewModel = LoginViewModel()
|
||||||
viewModel.isLoading = false // чтобы убрать спиннер
|
viewModel.isLoading = false // чтобы убрать спиннер
|
||||||
return RegistrationView(viewModel: viewModel)
|
return RegistrationView(viewModel: viewModel, onShowModePrompt: nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user