Skip to content

Commit

Permalink
Custom width (#4)
Browse files Browse the repository at this point in the history
* added code for more flexible monthly view width

* updated elegantpages

* updated elegantpages

* updated based on new elegantpages syntax

* new elegantpages
  • Loading branch information
ThasianX authored Jul 17, 2020
1 parent 9abf1d7 commit fe26eac
Show file tree
Hide file tree
Showing 14 changed files with 86 additions and 70 deletions.
2 changes: 1 addition & 1 deletion Example/Example.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,7 @@
repositoryURL = "https://github.com/ThasianX/ElegantPages";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.2.0;
minimumVersion = 1.4.0;
};
};
/* End XCRemoteSwiftPackageReference section */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/ThasianX/ElegantPages",
"state": {
"branch": null,
"revision": "2702cc471c7a1b63d94b6e598f6416d65fe6e22f",
"version": "1.2.1"
"revision": "7eb457484e04375d7e6a3ca442a98cbe75ead7b0",
"version": "1.4.0"
}
}
]
Expand Down
2 changes: 0 additions & 2 deletions Example/Example/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,6 @@
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
Expand Down
4 changes: 2 additions & 2 deletions Package.resolved
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
"repositoryURL": "https://github.com/ThasianX/ElegantPages",
"state": {
"branch": null,
"revision": "a7a5d37538a127d134104ee1743814d7cc597bf5",
"version": "1.2.2"
"revision": "7eb457484e04375d7e6a3ca442a98cbe75ead7b0",
"version": "1.4.0"
}
}
]
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ let package = Package(
targets: ["ElegantCalendar"]),
],
dependencies: [
.package(url: "https://github.com/ThasianX/ElegantPages", from: "1.2.0")
.package(url: "https://github.com/ThasianX/ElegantPages", from: "1.4.0")
],
targets: [
.target(
Expand Down
11 changes: 6 additions & 5 deletions Sources/ElegantCalendar/Helpers/Models/CalenderConstants.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,18 @@
import SwiftUI

let screen = UIScreen.main.bounds
let window = UIApplication.shared.windows.filter { $0.isKeyWindow }.first
let statusBarHeight = window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0

struct CalendarConstants {

static let cellHeight: CGFloat = screen.height
static let cellWidth: CGFloat = screen.width

static let horizontalPadding: CGFloat = cellWidth * 0.058

static let daysInRow: CGFloat = 7

struct Monthly {

static var cellWidth: CGFloat!
static let horizontalPadding: CGFloat = cellWidth * 0.045

static let outerHorizontalPadding: CGFloat = horizontalPadding + dayWidth/4

static let topPadding: CGFloat = cellHeight * 0.078
Expand All @@ -32,6 +30,9 @@ struct CalendarConstants {

struct Yearly {

static let cellWidth: CGFloat = screen.width
static let horizontalPadding: CGFloat = cellWidth * 0.058

static let outerHorizontalPadding: CGFloat = horizontalPadding + monthWidth/7

static let topPadding: CGFloat = cellHeight * 0.12
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class ElegantCalendarManager: ObservableObject {
}

public var isShowingYearView: Bool {
pagerManager.currentPage == 0
pagesManager.currentPage == 0
}

@Published public var datasource: ElegantCalendarDataSource?
Expand All @@ -26,7 +26,7 @@ public class ElegantCalendarManager: ObservableObject {
@Published public var yearlyManager: YearlyCalendarManager
@Published public var monthlyManager: MonthlyCalendarManager

let pagerManager: ElegantPagesManager
let pagesManager: ElegantPagesManager

private var anyCancellable = Set<AnyCancellable>()

Expand All @@ -38,9 +38,8 @@ public class ElegantCalendarManager: ObservableObject {
monthlyManager = MonthlyCalendarManager(configuration: configuration,
initialMonth: initialMonth)

pagerManager = ElegantPagesManager(startingPage: 1,
pagesManager = ElegantPagesManager(startingPage: 1,
pageTurnType: .calendarEarlySwipe)
pagerManager.delegate = self

yearlyManager.communicator = self
monthlyManager.communicator = self
Expand Down Expand Up @@ -78,11 +77,11 @@ public class ElegantCalendarManager: ObservableObject {

}

extension ElegantCalendarManager: ElegantPagesDelegate {
extension ElegantCalendarManager {

// accounts for both when the user scrolls to the yearly calendar view and the
// user presses the month text to scroll to the yearly calendar view
public func elegantPages(willDisplay page: Int) {
func scrollToYearIfOnYearlyView(_ page: Int) {
if page == 0 {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.75) {
self.yearlyManager.scrollToYear(self.currentMonth)
Expand All @@ -95,15 +94,15 @@ extension ElegantCalendarManager: ElegantPagesDelegate {
extension ElegantCalendarManager: ElegantCalendarCommunicator {

public func scrollToMonthAndShowMonthlyView(_ month: Date) {
pagerManager.scroll(to: 1)
pagesManager.scroll(to: 1)

DispatchQueue.main.asyncAfter(deadline: .now() + 0.75) {
self.scrollToMonth(month)
}
}

public func showYearlyView() {
pagerManager.scroll(to: 0)
pagesManager.scroll(to: 0)
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class MonthlyCalendarManager: ObservableObject, ConfigurationDirectAccess
@Published public private(set) var currentMonth: Date
@Published public var selectedDate: Date? = nil

let pagerManager: ElegantListManager
let listManager: ElegantListManager

@Published public var datasource: MonthlyCalendarDataSource?
@Published public var delegate: MonthlyCalendarDelegate?
Expand All @@ -22,8 +22,6 @@ public class MonthlyCalendarManager: ObservableObject, ConfigurationDirectAccess
var allowsHaptics: Bool = true
private var isHapticActive: Bool = true

var theme: CalendarTheme = .default

private var anyCancellable: AnyCancellable?

public init(configuration: CalendarConfiguration, initialMonth: Date? = nil) {
Expand All @@ -43,12 +41,8 @@ public class MonthlyCalendarManager: ObservableObject, ConfigurationDirectAccess

currentMonth = months[startingPage]

pagerManager = .init(startingPage: startingPage,
pageCount: months.count,
pageTurnType: .monthlyEarlyCutoff)

pagerManager.datasource = self
pagerManager.delegate = self
listManager = .init(startingPage: startingPage,
pageCount: months.count)

anyCancellable = $delegate.sink {
$0?.calendar(willDisplayMonth: self.currentMonth)
Expand All @@ -57,19 +51,9 @@ public class MonthlyCalendarManager: ObservableObject, ConfigurationDirectAccess

}

extension MonthlyCalendarManager: ElegantPagesDataSource {

public func elegantPages(viewForPage page: Int) -> AnyView {
MonthView(calendarManager: self, month: months[page])
.environment(\.calendarTheme, theme)
.erased
}

}

extension MonthlyCalendarManager: ElegantPagesDelegate {
extension MonthlyCalendarManager {

public func elegantPages(willDisplay page: Int) {
func configureNewMonth(at page: Int) {
if months[page] != currentMonth {
currentMonth = months[page]
selectedDate = nil
Expand Down Expand Up @@ -124,7 +108,7 @@ extension MonthlyCalendarManager {

if needsToScroll {
let page = calendar.monthsBetween(referenceDate, and: month)
pagerManager.scroll(to: page, animated: animated)
listManager.scroll(to: page, animated: animated)
} else {
isHapticActive = true
}
Expand Down Expand Up @@ -154,6 +138,14 @@ extension MonthlyCalendarManagerDirectAccess {
calendarManager.configuration
}

var listManager: ElegantListManager {
calendarManager.listManager
}

var months: [Date] {
calendarManager.months
}

var communicator: ElegantCalendarCommunicator? {
calendarManager.communicator
}
Expand All @@ -174,6 +166,14 @@ extension MonthlyCalendarManagerDirectAccess {
calendarManager.selectedDate
}

func configureNewMonth(at page: Int) {
calendarManager.configureNewMonth(at: page)
}

func scrollBackToToday() {
calendarManager.scrollBackToToday()
}

}

private extension Calendar {
Expand All @@ -187,18 +187,3 @@ private extension Calendar {
}

}

private extension PageTurnType {

static var monthlyEarlyCutoff: PageTurnType = .earlyCutoff(config: .monthlyConfig)

}

public extension EarlyCutOffConfiguration {

static let monthlyConfig = EarlyCutOffConfiguration(
scrollResistanceCutOff: 40,
pageTurnCutOff: 80,
pageTurnAnimation: .spring(response: 0.3, dampingFraction: 0.95))

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@ extension MonthlyCalendarView: Buildable {
///
/// - Parameter theme: theme of various components of the calendar
public func theme(_ theme: CalendarTheme) -> Self {
calendarManager.theme = theme
calendarManager.pagerManager.reloadPages()
defer {
calendarManager.listManager.reloadPages()
}
return mutating(keyPath: \.theme, value: theme)
}

Expand Down
5 changes: 3 additions & 2 deletions Sources/ElegantCalendar/Views/ElegantCalendarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,18 @@ public struct ElegantCalendarView: View {

var theme: CalendarTheme = .default

@ObservedObject public var calendarManager: ElegantCalendarManager
public let calendarManager: ElegantCalendarManager

public init(calendarManager: ElegantCalendarManager) {
self.calendarManager = calendarManager
}

public var body: some View {
ElegantHPages(manager: calendarManager.pagerManager) {
ElegantHPages(manager: calendarManager.pagesManager) {
yearlyCalendarView
monthlyCalendarView
}
.onPageChanged(calendarManager.scrollToYearIfOnYearlyView)
}

private var yearlyCalendarView: some View {
Expand Down
2 changes: 1 addition & 1 deletion Sources/ElegantCalendar/Views/Monthly/MonthView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ struct MonthView: View, MonthlyCalendarManagerDirectAccess {
Spacer()
}
.padding(.top, CalendarConstants.Monthly.topPadding)
.frame(width: CalendarConstants.cellWidth, height: CalendarConstants.cellHeight)
.frame(width: CalendarConstants.Monthly.cellWidth, height: CalendarConstants.cellHeight)
}

}
Expand Down
41 changes: 36 additions & 5 deletions Sources/ElegantCalendar/Views/Monthly/MonthlyCalendarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,25 +23,41 @@ public struct MonthlyCalendarView: View, MonthlyCalendarManagerDirectAccess {
}

public var body: some View {
ZStack(alignment: .top) {
monthsList
GeometryReader { geometry in
self.content(geometry: geometry)
}
}

private func content(geometry: GeometryProxy) -> some View {
CalendarConstants.Monthly.cellWidth = geometry.size.width

return ZStack(alignment: .top) {
ElegantVList(manager: listManager,
pageTurnType: .monthlyEarlyCutoff,
viewForPage: monthView)
.onPageChanged(configureNewMonth)
.frame(width: CalendarConstants.Monthly.cellWidth)

if isTodayWithinDateRange && !isCurrentMonthYearSameAsTodayMonthYear {
leftAlignedScrollBackToTodayButton
.padding(.trailing, CalendarConstants.Monthly.outerHorizontalPadding)
.offset(y: CalendarConstants.Monthly.topPadding + 3)
.transition(.opacity)
}
}
.frame(height: CalendarConstants.cellHeight)
}

private var monthsList: some View {
ElegantVList(manager: calendarManager.pagerManager)
private func monthView(for page: Int) -> AnyView {
MonthView(calendarManager: calendarManager, month: months[page])
.environment(\.calendarTheme, theme)
.erased
}

private var leftAlignedScrollBackToTodayButton: some View {
HStack {
Spacer()
ScrollBackToTodayButton(scrollBackToToday: { self.calendarManager.scrollBackToToday() },
ScrollBackToTodayButton(scrollBackToToday: scrollBackToToday,
color: theme.primary)
}
}
Expand All @@ -57,3 +73,18 @@ struct MonthlyCalendarView_Previews: PreviewProvider {
}
}
}

private extension PageTurnType {

static var monthlyEarlyCutoff: PageTurnType = .earlyCutoff(config: .monthlyConfig)

}

public extension EarlyCutOffConfiguration {

static let monthlyConfig = EarlyCutOffConfiguration(
scrollResistanceCutOff: 40,
pageTurnCutOff: 80,
pageTurnAnimation: .spring(response: 0.3, dampingFraction: 0.95))

}
2 changes: 1 addition & 1 deletion Sources/ElegantCalendar/Views/Yearly/YearView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ struct YearView: View, YearlyCalendarManagerDirectAccess {
Spacer()
}
.padding(.top, CalendarConstants.Yearly.topPadding)
.frame(width: CalendarConstants.cellWidth, height: CalendarConstants.cellHeight)
.frame(width: CalendarConstants.Yearly.cellWidth, height: CalendarConstants.cellHeight)
}

private var yearText: some View {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public struct YearlyCalendarView: View, YearlyCalendarManagerDirectAccess {
.environment(\.calendarTheme, self.theme)
}
}
.frame(width: CalendarConstants.cellWidth,
.frame(width: CalendarConstants.Yearly.cellWidth,
height: CalendarConstants.cellHeight)
}

Expand Down

0 comments on commit fe26eac

Please sign in to comment.