@@ -16,13 +16,15 @@ final class TodoEditorViewModel: Store {
1616 let content : String
1717 let dueDate : Date ?
1818 let tags : [ String ]
19+ let kind : TodoKind
1920
2021 init ( todo: Todo ) {
2122 self . isPinned = todo. isPinned
2223 self . title = todo. title
2324 self . content = todo. content
2425 self . dueDate = todo. dueDate
2526 self . tags = todo. tags
27+ self . kind = todo. kind
2628 }
2729
2830 init ( state: State ) {
@@ -31,6 +33,7 @@ final class TodoEditorViewModel: Store {
3133 self . content = state. content
3234 self . dueDate = state. dueDate
3335 self . tags = Array ( state. tags)
36+ self . kind = state. kind
3437 }
3538 }
3639
@@ -39,10 +42,12 @@ final class TodoEditorViewModel: Store {
3942 var title : String = " "
4043 var content : String = " "
4144 var dueDate : Date ?
45+ var showInfo : Bool = false
4246 var tags : OrderedSet < String > = [ ]
4347 var tagText : String = " "
4448 var focusOnEditor : Bool = false
4549 var tabViewTag : Tag = . editor
50+ var kind : TodoKind = . etc
4651 var isValidToSave : Bool {
4752 !title. trimmingCharacters ( in: . whitespacesAndNewlines) . isEmpty
4853 }
@@ -57,25 +62,33 @@ final class TodoEditorViewModel: Store {
5762 case removeTag( String )
5863 case setContent( String )
5964 case setDueDate( Date ? )
65+ case setKind( TodoKind )
66+ case setPinned( Bool )
67+ case setShowInfo( Bool )
6068 case setTabViewTag( Tag )
6169 case setTagText( String )
6270 case setTitle( String )
63- case togglePinned
6471 }
6572
6673 enum SideEffect { }
6774
6875 private( set) var state = State ( )
6976 private let calendar = Calendar . current
70- let navigationTitle : String
7177 private let id : String
7278 private let isCompleted : Bool
7379 private let isChecked : Bool
7480 private let createdAt : Date ?
7581 private let completedAt : Date ?
76- private let kind : TodoKind
7782 private let originalDraft : Draft ?
7883
84+ var navigationTitle : String {
85+ if originalDraft == nil {
86+ return " 새 \( state. kind. localizedName) 추가 "
87+ }
88+
89+ return " 편집 "
90+ }
91+
7992 var hasChanges : Bool {
8093 guard let originalDraft else { return true }
8194 return originalDraft != Draft ( state: state)
@@ -87,31 +100,29 @@ final class TodoEditorViewModel: Store {
87100
88101 // 새로운 Todo 생성용 생성자
89102 init ( kind: TodoKind ) {
90- self . navigationTitle = " 새 \( kind. localizedName) 추가 "
91103 self . id = UUID ( ) . uuidString
92104 self . isCompleted = false
93105 self . isChecked = false
94106 self . createdAt = nil
95107 self . completedAt = nil
96- self . kind = kind
97108 self . originalDraft = nil
109+ state. kind = kind
98110 }
99111
100112 // 기존 Todo 편집용 생성자
101113 init ( todo: Todo ) {
102- self . navigationTitle = " 편집 "
103114 self . id = todo. id
104115 self . isCompleted = todo. isCompleted
105116 self . isChecked = todo. isChecked
106117 self . createdAt = todo. createdAt
107118 self . completedAt = todo. completedAt
108- self . kind = todo. kind
109119 self . originalDraft = Draft ( todo: todo)
110120 state. isPinned = todo. isPinned
111121 state. title = todo. title
112122 state. content = todo. content
113123 state. dueDate = todo. dueDate
114124 state. tags = OrderedSet ( todo. tags)
125+ state. kind = todo. kind
115126 }
116127
117128 func reduce( with action: Action ) -> [ SideEffect ] {
@@ -134,10 +145,14 @@ final class TodoEditorViewModel: Store {
134145 } else {
135146 state. dueDate = nil
136147 }
148+ case . setKind( let todoKind) :
149+ state. kind = todoKind
150+ case . setPinned( let isPinned) :
151+ state. isPinned = isPinned
152+ case . setShowInfo( let isPresented) :
153+ state. showInfo = isPresented
137154 case . setTabViewTag( let tag) :
138155 state. tabViewTag = tag
139- case . togglePinned:
140- state. isPinned. toggle ( )
141156 }
142157
143158 if self . state != state { self . state = state }
@@ -177,7 +192,7 @@ extension TodoEditorViewModel {
177192 completedAt: self . completedAt,
178193 dueDate: state. dueDate,
179194 tags: state. tags. map { $0 } ,
180- kind: self . kind
195+ kind: state . kind
181196 )
182197 }
183198}
0 commit comments