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