This commit is contained in:
Vladimir Dubovik 2024-12-12 13:37:07 +03:00
parent 1de531abc8
commit 92b125927d
13 changed files with 45 additions and 6 deletions

View File

@ -11,6 +11,7 @@ struct MonthTabView: View {
@State private var currentMonthIndex: Int = 1
@State private var monthSlider: [[Date.MonthWeek]] = []
@State private var createMonth: Bool = false
@State private var currentWeekIndex: Int = 0
@ObservedObject var vm: ViewModel
var body: some View {
VStack {
@ -139,7 +140,7 @@ struct MonthTabView: View {
}
}
func paginateMonth() {
func paginateMonth(_ indexOfWeek: Int = 0) {
let calendar = Calendar.current
if monthSlider.indices.contains(currentMonthIndex) {
if let firstDate = monthSlider[currentMonthIndex].first?.week[0].date,

View File

@ -15,7 +15,7 @@ struct LoadingView: View {
.ignoresSafeArea()
ProgressView()
.progressViewStyle(CircularProgressViewStyle(tint: .secondary))
.scaleEffect(1.5)
.scaleEffect(1.2)
}
}
}

View File

@ -16,6 +16,7 @@ struct MainView: View {
var body: some View {
VStack {
SearchBarView(text: $searchText, vm: vm)
if (vm.isFirstStartOffApp && vm.isLoading) {
LoadingView(isLoading: $vm.isLoading)
}

View File

@ -0,0 +1,23 @@
//
// NoScheduleView.swift
// Schedule ICTIS
//
// Created by G412 on 12.12.2024.
//
import SwiftUI
struct NoScheduleView: View {
var body: some View {
VStack {
ScrollView (showsIndicators: false) {
Text("Пока расписания нет")
.padding(.top, 20)
}
}
}
}
#Preview {
NoScheduleView()
}

View File

@ -14,6 +14,7 @@ struct ScheduleView: View {
LoadingView(isLoading: $vm.isLoading)
}
else {
if vm.errorInNetwork != .invalidResponse {
ZStack (alignment: .top) {
ScrollView(.vertical, showsIndicators: false) {
VStack (spacing: 20) {
@ -59,11 +60,15 @@ struct ScheduleView: View {
.padding(.top, 30)
}
VStack {
LinearGradient(gradient: Gradient(colors: [Color("background").opacity(0.9), Color("background").opacity(0.89)]), startPoint: .top, endPoint: .bottom)
LinearGradient(gradient: Gradient(colors: [Color("background").opacity(0.95), Color.white.opacity(0.1)]), startPoint: .top, endPoint: .bottom)
}
.frame(width: UIScreen.main.bounds.width, height: 15)
}
}
else {
NoScheduleView()
}
}
}
}

View File

@ -28,6 +28,7 @@ struct SearchBarView: View {
self.isEditing = false
if (!text.isEmpty) {
vm.fetchWeekSchedule(text)
vm.group = text
}
self.text = ""
}

View File

@ -12,6 +12,7 @@ enum NetworkError: String, Error, LocalizedError {
case invalidResponse
case invalidData
case noNetwork
case noError
var errorDescription: String? {
switch self {
@ -23,6 +24,8 @@ enum NetworkError: String, Error, LocalizedError {
"Проверьте номер группы"
case .noNetwork:
"No network connection"
case .noError:
"Нет ошибки"
}
}
@ -36,6 +39,8 @@ enum NetworkError: String, Error, LocalizedError {
"Похоже такой группы не существует"
case .noNetwork:
"Проверьте подключение к интернету и попробуйте заново"
case .noError:
"Ошибки нет"
}
}
}

View File

@ -27,6 +27,7 @@ final class ViewModel: ObservableObject {
@Published var isShowingAlertForIncorrectGroup: Bool = false
@Published var errorInNetwork: NetworkError?
@Published var isLoading: Bool = false
@Published var group: String = ""
//MARK: Methods
func fetchWeekSchedule(_ group: String, _ num: Int = 0) {
@ -48,12 +49,14 @@ final class ViewModel: ObservableObject {
self.isFirstStartOffApp = false
self.isShowingAlertForIncorrectGroup = false
isLoading = false
self.errorInNetwork = .noError
}
catch {
if let error = error as? NetworkError {
switch (error) {
case .invalidResponse:
print(4)
errorInNetwork = .invalidResponse
case .invalidData:
errorInNetwork = .invalidData
self.isShowingAlertForIncorrectGroup = true