This commit is contained in:
Vladimir Dubovik
2025-02-06 13:28:57 +03:00
parent 06416138d9
commit 9f717d83df
17 changed files with 389 additions and 147 deletions

View File

@ -8,8 +8,8 @@
import SwiftUI
struct MonthTabView: View {
@State private var currentMonthIndex: Int = 1
@State private var monthSlider: [[Date.MonthWeek]] = []
@State var currentMonthIndex: Int = 1
@State var monthSlider: [[Date.MonthWeek]] = []
@State private var createMonth: Bool = false
@State private var currentWeekIndex: Int = 0
@ObservedObject var vm: ScheduleViewModel
@ -79,53 +79,8 @@ struct MonthTabView: View {
}
}
}
func paginateMonth(_ indexOfWeek: Int = 0) {
let calendar = Calendar.current
if monthSlider.indices.contains(currentMonthIndex) {
if let firstDate = monthSlider[currentMonthIndex].first?.week[0].date,
currentMonthIndex == 0 {
monthSlider.insert(firstDate.createPreviousMonth(), at: 0)
monthSlider.removeLast()
currentMonthIndex = 1
vm.selectedDay = calendar.date(byAdding: .weekOfYear, value: -5, to: vm.selectedDay) ?? Date.init()
vm.updateSelectedDayIndex()
vm.week -= 5
vm.fetchWeekSchedule(isOtherWeek: true)
}
if let lastDate = monthSlider[currentMonthIndex].last?.week[6].date,
currentMonthIndex == (monthSlider.count - 1) {
monthSlider.append(lastDate.createNextMonth())
monthSlider.removeFirst()
currentMonthIndex = monthSlider.count - 2
vm.selectedDay = calendar.date(byAdding: .weekOfYear, value: 5, to: vm.selectedDay) ?? Date.init()
vm.updateSelectedDayIndex()
vm.week += 5
vm.fetchWeekSchedule(isOtherWeek: true)
}
}
}
}
extension MonthTabView {
func updateMonthScreenViewForNewGroup() {
vm.updateSelectedDayIndex()
if monthSlider.isEmpty {
let currentMonth = Date().fetchMonth(vm.selectedDay)
if let firstDate = currentMonth.first?.week[0].date {
monthSlider.append(firstDate.createPreviousMonth())
}
monthSlider.append(currentMonth)
if let lastDate = currentMonth.last?.week[6].date {
monthSlider.append(lastDate.createNextMonth())
}
}
}
}
#Preview {
ContentView()

View File

@ -9,7 +9,7 @@ import SwiftUI
struct WeekTabView: View {
@State private var currentWeekIndex: Int = 1
@State private var weekSlider: [[Date.WeekDay]] = []
@State var weekSlider: [[Date.WeekDay]] = []
@State private var createWeek: Bool = false
@ObservedObject var vm: ScheduleViewModel
var body: some View {
@ -45,25 +45,6 @@ struct WeekTabView: View {
}
}
extension WeekTabView {
func updateWeekScreenViewForNewGroup() {
vm.updateSelectedDayIndex()
if weekSlider.isEmpty {
let currentWeek = Date().fetchWeek(vm.selectedDay)
if let firstDate = currentWeek.first?.date {
weekSlider.append(firstDate.createPrevioustWeek())
}
weekSlider.append(currentWeek)
if let lastDate = currentWeek.last?.date {
weekSlider.append(lastDate.createNextWeek())
}
}
}
}
#Preview {
ContentView()
}

View File

@ -29,42 +29,4 @@ struct WeekViewForMonth: View {
}
}
}
private func getForegroundColor(day: Date.WeekDay) -> Color {
if isDateInCurrentMonth(day.date) {
return isSameDate(day.date, vm.selectedDay) ? .white : .black
} else {
return isSameDate(day.date, vm.selectedDay) ? .white : Color("greyForDaysInMonthTabView")
}
}
private func getBackgroundColor(day: Date.WeekDay) -> Color {
return isSameDate(day.date, vm.selectedDay) ? Color("blueColor") : Color("background")
}
private func overlay(day: Date.WeekDay) -> some View {
Group {
if day.date.isToday && !isSameDate(day.date, vm.selectedDay) {
RoundedRectangle(cornerRadius: 100)
.stroke(Color("blueColor"), lineWidth: 2)
}
}
}
private func handleTap(day: Date.WeekDay) {
if isSameWeek(day.date, vm.selectedDay) {
print("На одной неделе")
}
else {
var difBetweenWeeks = weeksBetween(startDate: vm.selectedDay, endDate: day.date)
if day.date < vm.selectedDay {
difBetweenWeeks = difBetweenWeeks * -1
}
print(difBetweenWeeks)
vm.week += difBetweenWeeks
vm.fetchWeekSchedule(isOtherWeek: true)
}
vm.selectedDay = day.date
vm.updateSelectedDayIndex()
}
}

View File

@ -73,30 +73,4 @@ struct WeekViewForWeek: View {
}
}
}
func paginateWeek() {
let calendar = Calendar.current
if weekSlider.indices.contains(currentWeekIndex) {
if let firstDate = weekSlider[currentWeekIndex].first?.date,
currentWeekIndex == 0 {
vm.week -= 1
vm.fetchWeekSchedule(isOtherWeek: true)
weekSlider.insert(firstDate.createPrevioustWeek(), at: 0)
weekSlider.removeLast()
currentWeekIndex = 1
vm.selectedDay = calendar.date(byAdding: .weekOfYear, value: -1, to: vm.selectedDay) ?? Date.init()
vm.updateSelectedDayIndex()
}
if let lastDate = weekSlider[currentWeekIndex].last?.date,
currentWeekIndex == (weekSlider.count - 1) {
vm.week += 1
vm.fetchWeekSchedule(isOtherWeek: true)
weekSlider.append(lastDate.createNextWeek())
weekSlider.removeFirst()
currentWeekIndex = weekSlider.count - 2
vm.selectedDay = calendar.date(byAdding: .weekOfYear, value: 1, to: vm.selectedDay) ?? Date.init()
vm.updateSelectedDayIndex()
}
}
}
}