mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Fix date picker minimum date limit
This commit is contained in:
parent
943cf4674a
commit
b1ef3ba22d
@ -395,7 +395,14 @@ public final class DatePickerNode: ASDisplayNode {
|
|||||||
self.pickerBackgroundNode.isUserInteractionEnabled = false
|
self.pickerBackgroundNode.isUserInteractionEnabled = false
|
||||||
|
|
||||||
var monthChangedImpl: ((Date) -> Void)?
|
var monthChangedImpl: ((Date) -> Void)?
|
||||||
self.pickerNode = MonthPickerNode(theme: theme, strings: strings, date: self.state.date ?? monthForDate(Date()), yearRange: yearRange(for: self.state), valueChanged: { date in
|
|
||||||
|
let initialDate: Date
|
||||||
|
if let date = calendar.date(byAdding: .hour, value: 11, to: monthForDate(Date())) {
|
||||||
|
initialDate = date
|
||||||
|
} else {
|
||||||
|
initialDate = monthForDate(Date())
|
||||||
|
}
|
||||||
|
self.pickerNode = MonthPickerNode(theme: theme, strings: strings, date: self.state.date ?? initialDate, yearRange: yearRange(for: self.state), valueChanged: { date in
|
||||||
monthChangedImpl?(date)
|
monthChangedImpl?(date)
|
||||||
})
|
})
|
||||||
self.pickerNode.minimumDate = self.state.minDate
|
self.pickerNode.minimumDate = self.state.minDate
|
||||||
@ -511,7 +518,14 @@ public final class DatePickerNode: ASDisplayNode {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
self.pickerNode.date = self.state.date ?? self.state.selectedMonth
|
|
||||||
|
let initialDate: Date
|
||||||
|
if let date = calendar.date(byAdding: .hour, value: 11, to: self.state.selectedMonth) {
|
||||||
|
initialDate = date
|
||||||
|
} else {
|
||||||
|
initialDate = self.state.selectedMonth
|
||||||
|
}
|
||||||
|
self.pickerNode.date = self.state.date ?? initialDate
|
||||||
self.timePickerNode.date = self.state.date
|
self.timePickerNode.date = self.state.date
|
||||||
|
|
||||||
if let size = self.validLayout {
|
if let size = self.validLayout {
|
||||||
@ -595,6 +609,13 @@ public final class DatePickerNode: ASDisplayNode {
|
|||||||
dateComponents.minute = 0
|
dateComponents.minute = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let date = calendar.date(from: dateComponents), date <= self.minimumDate {
|
||||||
|
let minimumDateComponents = calendar.dateComponents([.hour, .minute, .day, .month, .year], from: self.minimumDate)
|
||||||
|
if let hour = minimumDateComponents.hour {
|
||||||
|
dateComponents.hour = hour + 3
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if let date = calendar.date(from: dateComponents), date >= self.minimumDate && date < self.maximumDate {
|
if let date = calendar.date(from: dateComponents), date >= self.minimumDate && date < self.maximumDate {
|
||||||
let updatedState = State(minDate: self.state.minDate, maxDate: self.state.maxDate, date: date, displayingMonthSelection: self.state.displayingMonthSelection, selectedMonth: monthNode.month)
|
let updatedState = State(minDate: self.state.minDate, maxDate: self.state.maxDate, date: date, displayingMonthSelection: self.state.displayingMonthSelection, selectedMonth: monthNode.month)
|
||||||
self.updateState(updatedState, animated: false)
|
self.updateState(updatedState, animated: false)
|
||||||
@ -833,8 +854,15 @@ private final class MonthPickerNode: ASDisplayNode, UIPickerViewDelegate, UIPick
|
|||||||
|
|
||||||
let month = calendar.component(.month, from: date)
|
let month = calendar.component(.month, from: date)
|
||||||
let year = calendar.component(.year, from: date)
|
let year = calendar.component(.year, from: date)
|
||||||
self.pickerView.selectRow(month - 1, inComponent: 0, animated: false)
|
|
||||||
self.pickerView.selectRow(year - yearRange.startIndex, inComponent: 1, animated: false)
|
let monthIndex = month - 1
|
||||||
|
if self.pickerView.selectedRow(inComponent: 0) != monthIndex {
|
||||||
|
self.pickerView.selectRow(monthIndex, inComponent: 0, animated: false)
|
||||||
|
}
|
||||||
|
let yearIndex = year - self.yearRange.startIndex
|
||||||
|
if self.pickerView.selectedRow(inComponent: 1) != yearIndex {
|
||||||
|
self.pickerView.selectRow(yearIndex, inComponent: 1, animated: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
|
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
|
||||||
@ -883,17 +911,17 @@ private final class MonthPickerNode: ASDisplayNode, UIPickerViewDelegate, UIPick
|
|||||||
|
|
||||||
var date = calendar.date(from: components)!
|
var date = calendar.date(from: components)!
|
||||||
|
|
||||||
|
var invalid = false
|
||||||
if let minimumDate = self.minimumDate, let maximumDate = self.maximumDate {
|
if let minimumDate = self.minimumDate, let maximumDate = self.maximumDate {
|
||||||
var changed = false
|
|
||||||
if date < minimumDate {
|
if date < minimumDate {
|
||||||
date = minimumDate
|
date = minimumDate
|
||||||
changed = true
|
invalid = true
|
||||||
}
|
}
|
||||||
if date > maximumDate {
|
if date > maximumDate {
|
||||||
date = maximumDate
|
date = maximumDate
|
||||||
changed = true
|
invalid = true
|
||||||
}
|
}
|
||||||
if changed {
|
if invalid {
|
||||||
let month = calendar.component(.month, from: date)
|
let month = calendar.component(.month, from: date)
|
||||||
let year = calendar.component(.year, from: date)
|
let year = calendar.component(.year, from: date)
|
||||||
self.pickerView.selectRow(month - 1, inComponent: 0, animated: true)
|
self.pickerView.selectRow(month - 1, inComponent: 0, animated: true)
|
||||||
@ -901,9 +929,10 @@ private final class MonthPickerNode: ASDisplayNode, UIPickerViewDelegate, UIPick
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.date = date
|
if !invalid {
|
||||||
|
self.date = date
|
||||||
self.valueChanged(date)
|
self.valueChanged(date)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override func layout() {
|
override func layout() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user