Сделано тображение пар для дня

This commit is contained in:
Vladimir Dubovik 2024-11-19 19:55:54 +03:00
parent 4fdec23e52
commit ac28d21f9e
2 changed files with 63 additions and 15 deletions

View File

@ -19,17 +19,58 @@ struct ScheduleView: View {
VStack { VStack {
SearchBarView(text: $searchText) SearchBarView(text: $searchText)
HeaderView() HeaderView()
ScrollView(.vertical) { ScrollView(.vertical, showsIndicators: false) {
VStack { VStack {
ForEach(vm.weekSchedule, id: \.week) { day in ForEach(vm.weekSchedule, id: \.week) { element in
HStack { let selectedDayIndex = vm.selectedIndex
Text(convertTimeString(day.table[1][1])[0]) if selectedDayIndex < 8 {
Text(convertTimeString(day.table[1][1])[9]) let schedule = element.table[selectedDayIndex]
ForEach(schedule.indices.dropFirst(), id: \.self) { index in
let lesson = schedule[index]
let firstThreeCharacters = lesson.prefix(3)
let checkEnglish = lesson.prefix(6)
if !lesson.isEmpty && index != 0 {
GeometryReader { geometry in
HStack (spacing: 8) {
VStack (alignment: .center) {
Text(convertTimeString(element.table[1][index])[0])
.font(.system(size: 15, weight: .light))
Text(convertTimeString(element.table[1][index])[1])
.font(.system(size: 15, weight: .light))
}
.padding(.top, 4)
.padding(.bottom, 4)
.padding(.leading, 8)
Rectangle()
.frame(maxHeight: geometry.size.height - 10)
.frame(width: 3)
.cornerRadius(20)
.padding(.top, 4)
.padding(.bottom, 4)
.foregroundColor(checkEnglish == "пр.Ино" || firstThreeCharacters == "лек" ? Color.blue : Color.green)
Text(lesson)
.font(.system(size: 16, weight: .medium))
.padding(.trailing, 8)
.frame(maxWidth: 280, alignment: .leading) // Выравнивание текста по левому краю
.padding(.top, 4)
.padding(.bottom, 4)
.multilineTextAlignment(.leading)
}
.background(Color.white)
.cornerRadius(20)
.padding(.horizontal, 10)
.frame(maxWidth: 420, maxHeight: 130)
}
.frame(height: 70)
}
}
} else {
Text("Сегодня нет пар")
} }
} }
} }
} }
Spacer()
} }
.background(.secondary.opacity(0.1)) .background(.secondary.opacity(0.1))
.onAppear(perform: { .onAppear(perform: {
@ -46,6 +87,7 @@ struct ScheduleView: View {
weekSlider.append(lastDate.createNextWeek()) weekSlider.append(lastDate.createNextWeek())
} }
} }
vm.updateSelectedDayIndex(currentDate)
}) })
} }

View File

@ -12,14 +12,14 @@ final class ViewModel: ObservableObject {
//MARK: Properties //MARK: Properties
@Published var weekSchedule: [Table] = [] @Published var weekSchedule: [Table] = []
@Published var selectedDay: Date = Date() @Published var selectedDay: Date = Date()
@Published var selectedIndex: Int = 0 @Published var selectedIndex: Int = 1
init() { init() {
fetchWeekSchedule() fetchWeekSchedule()
} }
//MARK: Methods //MARK: Methods
func fetchWeekSchedule(){ func fetchWeekSchedule() {
Task { Task {
do { do {
let schedule = try await NetworkManager.shared.getSchedule() let schedule = try await NetworkManager.shared.getSchedule()
@ -33,22 +33,28 @@ final class ViewModel: ObservableObject {
} }
} }
func getSelectedDaySchedule(for date: Date) -> [String]? {
guard let week = weekSchedule.first else { return nil }
let dayIndex = week.table.firstIndex { $0[0].contains(date.format("dd MMMM")) }
return dayIndex.flatMap { week.table[$0] }
}
func updateSelectedDayIndex(_ date: Date) { func updateSelectedDayIndex(_ date: Date) {
switch date.format("E") { switch date.format("E") {
case "Пн": case "Пн":
selectedIndex = 1
case "Вт":
selectedIndex = 2 selectedIndex = 2
case "Ср": case "Вт":
selectedIndex = 3 selectedIndex = 3
case "Чт": case "Ср":
selectedIndex = 4 selectedIndex = 4
case "Пт": case "Чт":
selectedIndex = 5 selectedIndex = 5
case "Сб": case "Пт":
selectedIndex = 6 selectedIndex = 6
default: case "Сб":
selectedIndex = 7 selectedIndex = 7
default:
selectedIndex = 8
} }
print(selectedIndex) print(selectedIndex)
} }