maybe fix but where days wouldn't show up for voting / missing

This commit is contained in:
Trey t
2022-02-17 12:14:26 -06:00
parent 7bcad65419
commit f0ed56fe94
4 changed files with 83 additions and 48 deletions

View File

@@ -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)

View File

@@ -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
}) })

View File

@@ -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)
} }
} }
} }

View File

@@ -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)