@@ -12,6 +12,7 @@ import OrderedCollections
1212final class TodoEditorViewModel : Store {
1313 private struct Draft : Equatable {
1414 let isCompleted : Bool
15+ let completedAt : Date ?
1516 let isPinned : Bool
1617 let title : String
1718 let content : String
@@ -21,6 +22,7 @@ final class TodoEditorViewModel: Store {
2122
2223 init ( todo: Todo ) {
2324 self . isCompleted = todo. isCompleted
25+ self . completedAt = todo. completedAt
2426 self . isPinned = todo. isPinned
2527 self . title = todo. title
2628 self . content = todo. content
@@ -31,6 +33,7 @@ final class TodoEditorViewModel: Store {
3133
3234 init ( state: State ) {
3335 self . isCompleted = state. isCompleted
36+ self . completedAt = state. completedAt
3437 self . isPinned = state. isPinned
3538 self . title = state. title
3639 self . content = state. content
@@ -42,6 +45,7 @@ final class TodoEditorViewModel: Store {
4245
4346 struct State : Equatable {
4447 var isCompleted : Bool = false
48+ var completedAt : Date ?
4549 var isPinned : Bool = false
4650 var title : String = " "
4751 var content : String = " "
@@ -83,7 +87,6 @@ final class TodoEditorViewModel: Store {
8387 private let isCompleted : Bool
8488 private let isChecked : Bool
8589 private let createdAt : Date ?
86- private let completedAt : Date ?
8790 private let originalDraft : Draft ?
8891
8992 var navigationTitle : String {
@@ -109,7 +112,6 @@ final class TodoEditorViewModel: Store {
109112 self . isCompleted = false
110113 self . isChecked = false
111114 self . createdAt = nil
112- self . completedAt = nil
113115 self . originalDraft = nil
114116 state. kind = kind
115117 }
@@ -120,9 +122,9 @@ final class TodoEditorViewModel: Store {
120122 self . isCompleted = todo. isCompleted
121123 self . isChecked = todo. isChecked
122124 self . createdAt = todo. createdAt
123- self . completedAt = todo. completedAt
124125 self . originalDraft = Draft ( todo: todo)
125126 state. isCompleted = todo. isCompleted
127+ state. completedAt = todo. completedAt
126128 state. isPinned = todo. isPinned
127129 state. title = todo. title
128130 state. content = todo. content
@@ -152,6 +154,9 @@ final class TodoEditorViewModel: Store {
152154 state. dueDate = nil
153155 }
154156 case . setCompleted( let isCompleted) :
157+ if state. isCompleted != isCompleted {
158+ state. completedAt = isCompleted ? Date ( ) : nil
159+ }
155160 state. isCompleted = isCompleted
156161 case . setKind( let todoKind) :
157162 state. kind = todoKind
@@ -197,7 +202,7 @@ extension TodoEditorViewModel {
197202 content: state. content,
198203 createdAt: self . createdAt ?? date,
199204 updatedAt: date,
200- completedAt: state. isCompleted ? ( self . completedAt ?? date ) : nil ,
205+ completedAt: state. completedAt,
201206 dueDate: state. dueDate,
202207 tags: state. tags. map { $0 } ,
203208 kind: state. kind
0 commit comments