Vladimir Dubovik 14c229175c Commit
2025-04-03 11:10:21 +03:00

98 lines
3.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// ScheduleView.swift
// Schedule ICTIS
//
// Created by Mironov Egor on 13.11.2024.
//
import SwiftUI
struct MainView: View {
@State private var searchText: String = ""
@State private var isShowingMonthSlider: Bool = false
@ObservedObject var vm: ScheduleViewModel
@ObservedObject var networkMonitor: NetworkMonitor
@FocusState private var isFocusedSearchBar: Bool
@State private var isScrolling: Bool = false
var body: some View {
VStack {
SearchBarView(text: $searchText, isFocused: _isFocusedSearchBar, vm: vm, isShowingMonthSlider: $isShowingMonthSlider)
.onChange(of: isScrolling, initial: false) { oldValue, newValue in
if newValue && isScrolling {
isFocusedSearchBar = false
}
}
CurrentDateView()
FilterGroupsView(vm: vm)
if vm.isLoading {
LoadingScheduleView()
}
else {
ScheduleView(vm: vm, networkMonitor: networkMonitor, isScrolling: $isScrolling)
}
}
.alert(isPresented: $vm.isShowingAlertForIncorrectGroup, error: vm.errorInNetwork) { error in
Button("ОК") {
print("This alert")
vm.isShowingAlertForIncorrectGroup = false
vm.errorInNetwork = nil
}
} message: { error in
Text(error.failureReason)
}
.background(Color("background"))
}
@ViewBuilder
func CurrentDateView() -> some View {
VStack (alignment: .leading, spacing: 6) {
HStack {
VStack (alignment: .leading, spacing: 0) {
Text(vm.selectedDay.format("EEEE"))
.font(.custom("Montserrat-SemiBold", fixedSize: 30))
.foregroundStyle(.black)
HStack (spacing: 5) {
Text(vm.selectedDay.format("dd"))
.font(.custom("Montserrat-Bold", fixedSize: 17))
.foregroundStyle(Color("grayForDate"))
Text(vm.selectedDay.format("MMMM"))
.font(.custom("Montserrat-Bold", fixedSize: 17))
.foregroundStyle(Color("grayForDate"))
Spacer()
Button(action: {
withAnimation(.easeInOut(duration: 0.5)) {
isShowingMonthSlider.toggle()
}
}) {
HStack(spacing: 2) {
Text(isShowingMonthSlider ? "Свернуть" : "Развернуть")
.font(.custom("Montserrat-Regular", fixedSize: 15))
.foregroundStyle(Color.blue)
Image(isShowingMonthSlider ? "arrowup" : "arrowdown")
.resizable()
.scaledToFit()
.frame(width: 15, height: 15)
}
}
}
}
.padding(.top, 8)
.padding(.leading, 5)
Spacer()
}
if (!isShowingMonthSlider) {
WeekTabView(vm: vm)
.transition(.opacity)
.animation(.easeInOut(duration: 0.25), value: isShowingMonthSlider)
}
else {
MonthTabView(vm: vm)
.transition(.opacity)
.animation(.linear(duration: 0.5), value: isShowingMonthSlider)
}
}
.padding(.horizontal)
}
}