fix: deduplicate overdue logic into TodoItem.isOverdue computed property
This commit is contained in:
@@ -13,6 +13,13 @@ class TodoItem: Identifiable {
|
|||||||
var modifiedAt: Date?
|
var modifiedAt: Date?
|
||||||
var list: TodoList?
|
var list: TodoList?
|
||||||
|
|
||||||
|
var isOverdue: Bool {
|
||||||
|
guard !isCompleted, let deadline else { return false }
|
||||||
|
return deadline < Calendar.current.startOfDay(
|
||||||
|
for: Calendar.current.date(byAdding: .day, value: 1, to: Date())!
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
init(
|
init(
|
||||||
id: UUID = UUID(),
|
id: UUID = UUID(),
|
||||||
title: String,
|
title: String,
|
||||||
|
|||||||
@@ -194,8 +194,7 @@ class ListStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func isDue(_ item: TodoItem) -> Bool {
|
private func isDue(_ item: TodoItem) -> Bool {
|
||||||
let startOfTomorrow = Calendar.current.startOfDay(for: Calendar.current.date(byAdding: .day, value: 1, to: Date())!)
|
item.isOverdue
|
||||||
return item.deadline != nil && item.deadline! < startOfTomorrow
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func save() {
|
private func save() {
|
||||||
|
|||||||
@@ -6,13 +6,6 @@ struct TodoRowView: View {
|
|||||||
var subtitle: String?
|
var subtitle: String?
|
||||||
var onTap: (() -> Void)?
|
var onTap: (() -> Void)?
|
||||||
|
|
||||||
private var isOverdue: Bool {
|
|
||||||
!item.isCompleted && item.deadline != nil
|
|
||||||
&& item.deadline! < Calendar.current.startOfDay(
|
|
||||||
for: Calendar.current.date(byAdding: .day, value: 1, to: Date())!
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
HStack {
|
HStack {
|
||||||
Button(action: onToggle) {
|
Button(action: onToggle) {
|
||||||
@@ -52,13 +45,13 @@ struct TodoRowView: View {
|
|||||||
.foregroundStyle(priority.color)
|
.foregroundStyle(priority.color)
|
||||||
}
|
}
|
||||||
|
|
||||||
if isOverdue {
|
if item.isOverdue {
|
||||||
Image(systemName: "exclamationmark.circle.fill")
|
Image(systemName: "exclamationmark.circle.fill")
|
||||||
.font(.system(size: 14))
|
.font(.system(size: 14))
|
||||||
.foregroundStyle(.red)
|
.foregroundStyle(.red)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.listRowBackground(isOverdue ? Color.red.opacity(0.08) : nil)
|
.listRowBackground(item.isOverdue ? Color.red.opacity(0.08) : nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func noteSnippet(_ text: String) -> String {
|
private func noteSnippet(_ text: String) -> String {
|
||||||
|
|||||||
Reference in New Issue
Block a user