diff --git a/Schedule ICTIS/Main/TabViews/MonthTabView.swift b/Schedule ICTIS/Main/TabViews/MonthTabView.swift index ed4ca89..75d059b 100644 --- a/Schedule ICTIS/Main/TabViews/MonthTabView.swift +++ b/Schedule ICTIS/Main/TabViews/MonthTabView.swift @@ -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, diff --git a/Schedule ICTIS/Main/FirstLaunchScheduleView.swift b/Schedule ICTIS/Main/Views/FirstLaunchScheduleView.swift similarity index 100% rename from Schedule ICTIS/Main/FirstLaunchScheduleView.swift rename to Schedule ICTIS/Main/Views/FirstLaunchScheduleView.swift diff --git a/Schedule ICTIS/Main/LoadingView.swift b/Schedule ICTIS/Main/Views/LoadingView.swift similarity index 93% rename from Schedule ICTIS/Main/LoadingView.swift rename to Schedule ICTIS/Main/Views/LoadingView.swift index 372f54e..81fc7ec 100644 --- a/Schedule ICTIS/Main/LoadingView.swift +++ b/Schedule ICTIS/Main/Views/LoadingView.swift @@ -15,7 +15,7 @@ struct LoadingView: View { .ignoresSafeArea() ProgressView() .progressViewStyle(CircularProgressViewStyle(tint: .secondary)) - .scaleEffect(1.5) + .scaleEffect(1.2) } } } diff --git a/Schedule ICTIS/Main/MainView.swift b/Schedule ICTIS/Main/Views/MainView.swift similarity index 99% rename from Schedule ICTIS/Main/MainView.swift rename to Schedule ICTIS/Main/Views/MainView.swift index 047bba4..f5e8339 100644 --- a/Schedule ICTIS/Main/MainView.swift +++ b/Schedule ICTIS/Main/Views/MainView.swift @@ -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) } diff --git a/Schedule ICTIS/Main/Views/NoScheduleView.swift b/Schedule ICTIS/Main/Views/NoScheduleView.swift new file mode 100644 index 0000000..384e2be --- /dev/null +++ b/Schedule ICTIS/Main/Views/NoScheduleView.swift @@ -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() +} diff --git a/Schedule ICTIS/Main/ScheduleView.swift b/Schedule ICTIS/Main/Views/ScheduleView.swift similarity index 93% rename from Schedule ICTIS/Main/ScheduleView.swift rename to Schedule ICTIS/Main/Views/ScheduleView.swift index 2e319eb..4873664 100644 --- a/Schedule ICTIS/Main/ScheduleView.swift +++ b/Schedule ICTIS/Main/Views/ScheduleView.swift @@ -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) { @@ -57,11 +58,15 @@ struct ScheduleView: View { .frame(width: UIScreen.main.bounds.width) .padding(.bottom, 100) .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() } } } diff --git a/Schedule ICTIS/Main/SearchBarView.swift b/Schedule ICTIS/Main/Views/SearchBarView.swift similarity index 98% rename from Schedule ICTIS/Main/SearchBarView.swift rename to Schedule ICTIS/Main/Views/SearchBarView.swift index abe37e9..e998365 100644 --- a/Schedule ICTIS/Main/SearchBarView.swift +++ b/Schedule ICTIS/Main/Views/SearchBarView.swift @@ -28,6 +28,7 @@ struct SearchBarView: View { self.isEditing = false if (!text.isEmpty) { vm.fetchWeekSchedule(text) + vm.group = text } self.text = "" } diff --git a/Schedule ICTIS/Helpers/Date+Extensions.swift b/Schedule ICTIS/Utilities/Extensions/Date+Extensions.swift similarity index 100% rename from Schedule ICTIS/Helpers/Date+Extensions.swift rename to Schedule ICTIS/Utilities/Extensions/Date+Extensions.swift diff --git a/Schedule ICTIS/Helpers/OffsetKey.swift b/Schedule ICTIS/Utilities/Extensions/OffsetKey.swift similarity index 100% rename from Schedule ICTIS/Helpers/OffsetKey.swift rename to Schedule ICTIS/Utilities/Extensions/OffsetKey.swift diff --git a/Schedule ICTIS/Helpers/View+Extensions.swift b/Schedule ICTIS/Utilities/Extensions/View+Extensions.swift similarity index 100% rename from Schedule ICTIS/Helpers/View+Extensions.swift rename to Schedule ICTIS/Utilities/Extensions/View+Extensions.swift diff --git a/Schedule ICTIS/Network/NetworkError.swift b/Schedule ICTIS/Utilities/Network/NetworkError.swift similarity index 89% rename from Schedule ICTIS/Network/NetworkError.swift rename to Schedule ICTIS/Utilities/Network/NetworkError.swift index 4e049c2..804dad0 100644 --- a/Schedule ICTIS/Network/NetworkError.swift +++ b/Schedule ICTIS/Utilities/Network/NetworkError.swift @@ -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: + "Ошибки нет" } } } diff --git a/Schedule ICTIS/Network/NetworkManager.swift b/Schedule ICTIS/Utilities/Network/NetworkManager.swift similarity index 100% rename from Schedule ICTIS/Network/NetworkManager.swift rename to Schedule ICTIS/Utilities/Network/NetworkManager.swift diff --git a/Schedule ICTIS/ViewModel/ViewModel.swift b/Schedule ICTIS/ViewModel/ViewModel.swift index c4bf32b..52f3b33 100644 --- a/Schedule ICTIS/ViewModel/ViewModel.swift +++ b/Schedule ICTIS/ViewModel/ViewModel.swift @@ -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) { @@ -38,7 +39,7 @@ final class ViewModel: ObservableObject { week += num schedule = try await NetworkManager.shared.getScheduleForOtherWeek(week, numOfGroup) } - else{ + else { schedule = try await NetworkManager.shared.getSchedule(group) } weekSchedule = schedule.table @@ -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