Skip to content

Commit

Permalink
fix: DatePicker
Browse files Browse the repository at this point in the history
  • Loading branch information
hhhello0507 committed Jul 27, 2024
1 parent 934276c commit aa8a334
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 14 deletions.
45 changes: 31 additions & 14 deletions Source/DDS/Component/Modal/DatePicker/DatePickerPresenter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import SwiftUI
public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
@StateObject private var provider: DatePickerProvider
@State private var size: CGSize = .zero
@State private var monthDate: Date = .now

private let calendar = {
var calendar = Calendar.current
calendar.locale = Locale(identifier: "ko-KR")
Expand All @@ -25,12 +25,12 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
}

private var range: Int? {
calendar.range(of: .day, in: .month, for: monthDate)?.count
calendar.range(of: .day, in: .month, for: provider.monthDate)?.count
}

private var weeks: [[Date?]] {
// 해당 월의 첫째 날
var components = calendar.dateComponents([.year, .month], from: monthDate)
var components = calendar.dateComponents([.year, .month], from: provider.monthDate)
components.day = 1
let firstDayOfMonth = calendar.date(from: components)!

Expand Down Expand Up @@ -65,6 +65,12 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
return false
}

private func equals(_ d1: Date, _ d2: Date) -> Bool {
let startComponents = calendar.dateComponents([.year, .month, .day], from: d1)
let endComponents = calendar.dateComponents([.year, .month, .day], from: d2)
return startComponents == endComponents
}

public var body: some View {
BaseModal(
isPresent: $provider.isPresent,
Expand All @@ -87,7 +93,7 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
.clipShape(.extraLarge)
}
}
.animation(.spring, value: monthDate)
.animation(.spring, value: provider.monthDate)
}

@ViewBuilder
Expand All @@ -99,16 +105,16 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
.frame(maxWidth: .infinity, alignment: .leading)
HStack(spacing: 8) {
Text(
String(calendar.dateComponents([.year], from: monthDate).year ?? 0)
String(calendar.dateComponents([.year], from: provider.monthDate).year ?? 0)
+ ""
+ String(calendar.dateComponents([.month], from: monthDate).month ?? 0)
+ String(calendar.dateComponents([.month], from: provider.monthDate).month ?? 0)
+ "")
.body1(.medium)
.foreground(DodamColor.Label.strong)
Spacer()
Button {
if let date = calendar.date(byAdding: .month, value: -1, to: monthDate) {
self.monthDate = date
if let date = calendar.date(byAdding: .month, value: -1, to: provider.monthDate) {
provider.monthDate = date
}
} label: {
Image(icon: .chevronLeft)
Expand All @@ -118,8 +124,8 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
.padding(8)
}
Button {
if let date = calendar.date(byAdding: .month, value: 1, to: monthDate) {
self.monthDate = date
if let date = calendar.date(byAdding: .month, value: 1, to: provider.monthDate) {
provider.monthDate = date
}
} label: {
Image(icon: .chevronRight)
Expand All @@ -130,7 +136,7 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
}
}
}
.animation(.none, value: monthDate)
.animation(.none, value: provider.monthDate)
}

@ViewBuilder
Expand All @@ -145,16 +151,17 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
.frame(maxWidth: .infinity)
}
}
Spacer().frame(height: 4)
// days
ForEach(weeks, id: \.self) { week in
HStack(spacing: 0) {
ForEach(week, id: \.self) { day in
ForEach(Array(week.enumerated()), id: \.offset) { idx, day in
let enabled = isEnabled(
day ?? .now,
between: datePicker.startDate,
and: datePicker.endDate
)
let selected = day == provider.date
let selected = day == nil ? false : equals(day!, provider.date)
Button {
provider.date = day ?? .now
} label: {
Expand Down Expand Up @@ -187,7 +194,17 @@ public struct DodamDatePickerPresenter<C: View>: ModalViewProtocol {
}
}
}
.animation(.none, value: monthDate)
.animation(.none, value: provider.monthDate)
.onChange(of: weeks) { _ in
print("=================")
weeks.forEach { dates in
dates.forEach { day in
print(day)
}
print("----")
}
print("=================")
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public final class DatePickerProvider: ModalProvider {
@Published var isPresent = false

@Published public var date: Date = .now
@Published public var monthDate: Date = .now

@Published var datePicker: DatePicker?

Expand All @@ -22,6 +23,7 @@ public final class DatePickerProvider: ModalProvider {
self.isPresent = true

self.date = .now
self.monthDate = .now

self.datePicker = datePicker
}
Expand Down

0 comments on commit aa8a334

Please sign in to comment.