maybe fix but where days wouldn't show up for voting / missing
This commit is contained in:
@@ -49,7 +49,11 @@ class ContentModeViewModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public func shouldShowVotingHeader() -> Bool {
|
public func shouldShowVotingHeader() -> Bool {
|
||||||
isMissingCurrentVote() && savedOnboardingData.ableToVoteBasedOnCurentTime() ? true : false
|
if isMissingCurrentVote() {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return savedOnboardingData.ableToVoteBasedOnCurentTime() ? true : false
|
||||||
}
|
}
|
||||||
|
|
||||||
public func updateOnboardingData(onboardingData: OnboardingData) {
|
public func updateOnboardingData(onboardingData: OnboardingData) {
|
||||||
@@ -58,23 +62,29 @@ class ContentModeViewModel: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func isMissingCurrentVote() -> Bool {
|
private func isMissingCurrentVote() -> Bool {
|
||||||
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
let latestVoteUnLocked = UserDefaultsStore.getOnboarding().ableToVoteBasedOnCurentTime()
|
||||||
|
let inputDay = UserDefaultsStore.getOnboarding().inputDay
|
||||||
|
|
||||||
var calendar = Calendar.current
|
var startDate: Date?
|
||||||
calendar.timeZone = NSTimeZone.local
|
|
||||||
|
|
||||||
var dateFrom: Date
|
switch (latestVoteUnLocked, inputDay) {
|
||||||
switch savedOnboardingData.inputDay {
|
case (true, .Previous):
|
||||||
case .Today:
|
startDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
dateFrom = calendar.startOfDay(for: Date())
|
case (true, .Today):
|
||||||
case .Previous:
|
startDate = Date()
|
||||||
dateFrom = calendar.startOfDay(for: Date())
|
case (false, .Previous):
|
||||||
dateFrom = calendar.date(byAdding: .day, value: -1, to: dateFrom)!
|
startDate = Calendar.current.date(byAdding: .day, value: -2, to: Date())!
|
||||||
|
case (false, .Today):
|
||||||
|
startDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
}
|
}
|
||||||
let dateTo = calendar.date(byAdding: .day, value: 1, to: dateFrom)!
|
|
||||||
|
|
||||||
let fromPredicate = NSPredicate(format: "%@ <= %K", dateFrom as NSDate, #keyPath(MoodEntry.forDate))
|
startDate = Calendar.current.startOfDay(for: startDate!)
|
||||||
let toPredicate = NSPredicate(format: "%K < %@", #keyPath(MoodEntry.forDate), dateTo as NSDate)
|
let endDate = Calendar.current.date(byAdding: .day, value: 1, to: startDate!)!
|
||||||
|
|
||||||
|
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
||||||
|
let fromPredicate = NSPredicate(format: "%@ <= %K", startDate!
|
||||||
|
as NSDate, #keyPath(MoodEntry.forDate))
|
||||||
|
let toPredicate = NSPredicate(format: "%K < %@", #keyPath(MoodEntry.forDate), endDate as NSDate)
|
||||||
let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate])
|
let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate, toPredicate])
|
||||||
fetchRequest.predicate = datePredicate
|
fetchRequest.predicate = datePredicate
|
||||||
let entries = try! PersistenceController.shared.viewContext.count(for: fetchRequest)
|
let entries = try! PersistenceController.shared.viewContext.count(for: fetchRequest)
|
||||||
|
|||||||
@@ -146,13 +146,28 @@ class PersistenceController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fillInMissingDates() {
|
func fillInMissingDates() {
|
||||||
|
let latestVoteUnLocked = UserDefaultsStore.getOnboarding().ableToVoteBasedOnCurentTime()
|
||||||
|
let inputDay = UserDefaultsStore.getOnboarding().inputDay
|
||||||
|
|
||||||
|
var endDate: Date?
|
||||||
|
|
||||||
|
switch (latestVoteUnLocked, inputDay) {
|
||||||
|
case (true, .Previous):
|
||||||
|
endDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
|
case (true, .Today):
|
||||||
|
endDate = Date()
|
||||||
|
case (false, .Previous):
|
||||||
|
endDate = Calendar.current.date(byAdding: .day, value: -2, to: Date())!
|
||||||
|
case (false, .Today):
|
||||||
|
endDate = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
|
}
|
||||||
|
|
||||||
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
let fetchRequest = NSFetchRequest<MoodEntry>(entityName: "MoodEntry")
|
||||||
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: false)]
|
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "forDate", ascending: false)]
|
||||||
let entries = try! viewContext.fetch(fetchRequest)
|
let entries = try! viewContext.fetch(fetchRequest)
|
||||||
|
|
||||||
if let firstEntry = entries.last?.forDate {
|
if let firstEntry = entries.last?.forDate {
|
||||||
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
let allDates: [Date] = Date.dates(from: firstEntry, to: endDate!).map({
|
||||||
let allDates: [Date] = Date.dates(from: firstEntry, to: yesterday).map({
|
|
||||||
let zeroDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: $0)!
|
let zeroDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: $0)!
|
||||||
return zeroDate
|
return zeroDate
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ struct AddMoodHeaderView: View {
|
|||||||
|
|
||||||
let addItemHeaderClosure: ((Mood, Date) -> Void)
|
let addItemHeaderClosure: ((Mood, Date) -> Void)
|
||||||
|
|
||||||
var overrideDay: DayOptions?
|
init(addItemHeaderClosure: @escaping ((Mood, Date) -> Void)) {
|
||||||
|
self.addItemHeaderClosure = addItemHeaderClosure
|
||||||
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
ZStack {
|
ZStack {
|
||||||
@@ -55,40 +57,48 @@ struct AddMoodHeaderView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func getTitle() -> String {
|
private func getTitle() -> String {
|
||||||
if let overrideDay = overrideDay {
|
//if this is being shown we're missing an entry
|
||||||
switch overrideDay {
|
// voting time is noon
|
||||||
case .Today:
|
// vote for current day
|
||||||
return String(localized: "add_mood_header_view_title_today")
|
// today at 11 am -> How as yesterday
|
||||||
case .Previous:
|
// today at 1 pm -> How is today
|
||||||
return String(localized: "add_mood_header_view_title_yesterday")
|
// vote for previous day
|
||||||
}
|
// today at 11 am -> How as 2 days ago
|
||||||
} else {
|
// today at 1 pm -> How was yesterday
|
||||||
switch savedOnboardingData.inputDay {
|
|
||||||
case .Today:
|
let latestVoteUnLocked = UserDefaultsStore.getOnboarding().ableToVoteBasedOnCurentTime()
|
||||||
return String(localized: "add_mood_header_view_title_today")
|
let inputDay = UserDefaultsStore.getOnboarding().inputDay
|
||||||
case .Previous:
|
|
||||||
return String(localized: "add_mood_header_view_title_yesterday")
|
switch (latestVoteUnLocked, inputDay) {
|
||||||
}
|
case (true, .Previous):
|
||||||
|
return "how was yesterday"
|
||||||
|
case (true, .Today):
|
||||||
|
return "how is today"
|
||||||
|
case (false, .Previous):
|
||||||
|
return "how was two days ago"
|
||||||
|
case (false, .Today):
|
||||||
|
return "how as yesterday"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func addItem(withMood mood: Mood) {
|
private func addItem(withMood mood: Mood) {
|
||||||
if let overrideDay = overrideDay {
|
let latestVoteUnLocked = UserDefaultsStore.getOnboarding().ableToVoteBasedOnCurentTime()
|
||||||
switch overrideDay {
|
let inputDay = UserDefaultsStore.getOnboarding().inputDay
|
||||||
case .Today:
|
|
||||||
addItemHeaderClosure(mood, Date())
|
var date: Date?
|
||||||
case .Previous:
|
|
||||||
let date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
switch (latestVoteUnLocked, inputDay) {
|
||||||
addItemHeaderClosure(mood, date)
|
case (true, .Previous):
|
||||||
}
|
date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
} else {
|
case (true, .Today):
|
||||||
switch savedOnboardingData.inputDay {
|
date = Date()
|
||||||
case .Today:
|
case (false, .Previous):
|
||||||
addItemHeaderClosure(mood, Date())
|
date = Calendar.current.date(byAdding: .day, value: -2, to: Date())!
|
||||||
case .Previous:
|
case (false, .Today):
|
||||||
let date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
date = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
|
||||||
addItemHeaderClosure(mood, date)
|
}
|
||||||
}
|
if let date = date {
|
||||||
|
addItemHeaderClosure(mood, date)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ struct EmptyContentView: View {
|
|||||||
withAnimation {
|
withAnimation {
|
||||||
viewModel.add(mood: mood, forDate: date, entryType: .header)
|
viewModel.add(mood: mood, forDate: date, entryType: .header)
|
||||||
}
|
}
|
||||||
}, overrideDay: viewModel.shouldShowVotingHeader() ? .Today : .Previous)
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.fixedSize(horizontal: false, vertical: true)
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
|
|||||||
Reference in New Issue
Block a user