72 lines
2.6 KiB
Swift
72 lines
2.6 KiB
Swift
//
|
|
// yobbleApp.swift
|
|
// yobble
|
|
//
|
|
// Created by cheykrym on 19.09.2025.
|
|
//
|
|
|
|
import SwiftUI
|
|
import CoreData
|
|
|
|
@main
|
|
struct yobbleApp: App {
|
|
@StateObject private var themeManager = ThemeManager()
|
|
@StateObject private var viewModel = LoginViewModel()
|
|
@StateObject private var messageCenter = IncomingMessageCenter()
|
|
private let persistenceController = PersistenceController.shared
|
|
|
|
var body: some Scene {
|
|
WindowGroup {
|
|
ZStack(alignment: .top) {
|
|
Group {
|
|
if viewModel.isLoading {
|
|
SplashScreenView()
|
|
} else if viewModel.isLoggedIn {
|
|
MainView(viewModel: viewModel)
|
|
} else {
|
|
LoginView(viewModel: viewModel)
|
|
}
|
|
}
|
|
|
|
if let banner = messageCenter.banner {
|
|
NewMessageBannerView(
|
|
banner: banner,
|
|
onOpen: { messageCenter.openCurrentChat() },
|
|
onDismiss: { messageCenter.dismissBanner() }
|
|
)
|
|
.padding(.horizontal, 16)
|
|
.padding(.top, 12)
|
|
.transition(.move(edge: .top).combined(with: .opacity))
|
|
.zIndex(1)
|
|
}
|
|
}
|
|
.animation(.spring(response: 0.35, dampingFraction: 0.8), value: messageCenter.banner != nil)
|
|
.sheet(item: $messageCenter.presentedChat) { chatItem in
|
|
NavigationView {
|
|
PrivateChatView(
|
|
chat: chatItem,
|
|
currentUserId: messageCenter.currentUserId
|
|
)
|
|
.toolbar {
|
|
ToolbarItem(placement: .cancellationAction) {
|
|
Button(NSLocalizedString("Закрыть", comment: "")) {
|
|
messageCenter.presentedChat = nil
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.environmentObject(messageCenter)
|
|
.environmentObject(themeManager)
|
|
.preferredColorScheme(themeManager.theme.colorScheme)
|
|
.environment(\.managedObjectContext, persistenceController.viewContext)
|
|
.onAppear {
|
|
messageCenter.currentUserId = viewModel.userId.isEmpty ? nil : viewModel.userId
|
|
}
|
|
.onChange(of: viewModel.userId) { newValue in
|
|
messageCenter.currentUserId = newValue.isEmpty ? nil : newValue
|
|
}
|
|
}
|
|
}
|
|
}
|