Skip to content

Commit

Permalink
feat: date initializer for OBCalendar
Browse files Browse the repository at this point in the history
  • Loading branch information
mtktsl committed Oct 1, 2024
1 parent 16a2b91 commit 8404ea3
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 51 deletions.
54 changes: 3 additions & 51 deletions Sources/OBCalendar/OBCalendar.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public struct OBCalendar<
_ daysView: OBCollectionView<Day, CalendarModel.Day>
) -> Month

@ViewBuilder
@ViewBuilder
let dayContent: (
_ model: (
year: CalendarModel.Year,
Expand All @@ -47,52 +47,6 @@ public struct OBCalendar<
day: ScrollViewProxy?
)
) -> Day

init(
years: [CalendarModel.Year],
lazyYears: Bool = false,
lazyMonths: Bool = false,
lazyDays: Bool = false,

@ViewBuilder dayContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month,
day: CalendarModel.Day
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?,
day: ScrollViewProxy?
)
) -> Day,

@ViewBuilder monthContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?
),
_ daysView: OBCollectionView<Day, CalendarModel.Day>
) -> Month,

@ViewBuilder yearContent: @escaping (
_ year: CalendarModel.Year,
_ scrollProxy: ScrollViewProxy?,
_ monthsView: OBCollectionView<Month, CalendarModel.Month>
) -> Year
) {
self.years = years
self.lazyYears = lazyYears
self.lazyMonths = lazyMonths
self.lazyDays = lazyDays
self.yearContent = yearContent
self.monthContent = monthContent
self.dayContent = dayContent
}

let dayGridItem: [GridItem] = [
.init(spacing: .zero),
Expand Down Expand Up @@ -154,10 +108,8 @@ public struct OBCalendar<
let placeholderView = Color.red

return OBCalendar(
years: CalendarModelBuilder.defaultLayout(
startingDate: startingDate,
endingDate: endingDate
)
startingDate: startingDate,
endingDate: endingDate
) { model, scrollProxy in

ZStack {
Expand Down
108 changes: 108 additions & 0 deletions Sources/OBCalendar/Utility/OBCalendar+Init.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
//
// OBCalendar+Init.swift
//
//
// Created by Metin Tarık Kiki on 1.10.2024.
//

import SwiftUI

extension OBCalendar {

//MARK: - Years array
public init(
years: [CalendarModel.Year],
lazyYears: Bool = false,
lazyMonths: Bool = false,
lazyDays: Bool = false,

@ViewBuilder dayContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month,
day: CalendarModel.Day
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?,
day: ScrollViewProxy?
)
) -> Day,

@ViewBuilder monthContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?
),
_ daysView: OBCollectionView<Day, CalendarModel.Day>
) -> Month,

@ViewBuilder yearContent: @escaping (
_ year: CalendarModel.Year,
_ scrollProxy: ScrollViewProxy?,
_ monthsView: OBCollectionView<Month, CalendarModel.Month>
) -> Year
) {
self.years = years
self.lazyYears = lazyYears
self.lazyMonths = lazyMonths
self.lazyDays = lazyDays
self.yearContent = yearContent
self.monthContent = monthContent
self.dayContent = dayContent
}

//MARK: - Start-end date
public init(
startingDate: Date,
endingDate: Date,
lazyYears: Bool = false,
lazyMonths: Bool = false,
lazyDays: Bool = false,
@ViewBuilder dayContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month,
day: CalendarModel.Day
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?,
day: ScrollViewProxy?
)
) -> Day,

@ViewBuilder monthContent: @escaping (
_ model: (
year: CalendarModel.Year,
month: CalendarModel.Month
),
_ scrollProxy: (
year: ScrollViewProxy?,
month: ScrollViewProxy?
),
_ daysView: OBCollectionView<Day, CalendarModel.Day>
) -> Month,

@ViewBuilder yearContent: @escaping (
_ year: CalendarModel.Year,
_ scrollProxy: ScrollViewProxy?,
_ monthsView: OBCollectionView<Month, CalendarModel.Month>
) -> Year
) {
let years = CalendarModelBuilder.defaultLayout(startingDate: startingDate, endingDate: endingDate)
self.init(
years: years,
lazyYears: lazyYears,
lazyMonths: lazyMonths,
lazyDays: lazyDays,
dayContent: dayContent,
monthContent: monthContent,
yearContent: yearContent
)
}
}

0 comments on commit 8404ea3

Please sign in to comment.