Skip to content

Commit 714c7ca

Browse files
committed
refactor: TodoDraft 변경 감지 단순화
1 parent 5d877ba commit 714c7ca

2 files changed

Lines changed: 32 additions & 40 deletions

File tree

Application/DevLogDomain/Sources/Entity/TodoDraft.swift

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import Foundation
99

10-
public struct TodoDraft: Hashable {
10+
public struct TodoDraft: Equatable {
1111
public var id: String
1212
public var isPinned: Bool
1313
public var isCompleted: Bool
@@ -48,4 +48,32 @@ public struct TodoDraft: Hashable {
4848
self.tags = tags
4949
self.category = category
5050
}
51+
52+
public init(todo: Todo) {
53+
self.id = todo.id
54+
self.isPinned = todo.isPinned
55+
self.isCompleted = todo.isCompleted
56+
self.isChecked = todo.isChecked
57+
self.title = todo.title
58+
self.content = todo.content
59+
self.createdAt = todo.createdAt
60+
self.updatedAt = todo.updatedAt
61+
self.completedAt = todo.completedAt
62+
self.dueDate = todo.dueDate
63+
self.tags = todo.tags
64+
self.category = todo.category
65+
}
66+
67+
public static func == (lhs: TodoDraft, rhs: TodoDraft) -> Bool {
68+
lhs.id == rhs.id &&
69+
lhs.isPinned == rhs.isPinned &&
70+
lhs.isCompleted == rhs.isCompleted &&
71+
lhs.isChecked == rhs.isChecked &&
72+
lhs.title == rhs.title &&
73+
lhs.content == rhs.content &&
74+
lhs.completedAt == rhs.completedAt &&
75+
lhs.dueDate == rhs.dueDate &&
76+
lhs.tags == rhs.tags &&
77+
lhs.category == rhs.category
78+
}
5179
}

Application/DevLogPresentation/Sources/Home/TodoEditorViewModel.swift

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -11,39 +11,6 @@ import DevLogDomain
1111

1212
@Observable
1313
final class TodoEditorViewModel: Store {
14-
private struct Draft: Equatable {
15-
let isCompleted: Bool
16-
let completedAt: Date?
17-
let isPinned: Bool
18-
let title: String
19-
let content: String
20-
let dueDate: Date?
21-
let tags: [String]
22-
let category: TodoCategory
23-
24-
init(todo: Todo) {
25-
self.isCompleted = todo.isCompleted
26-
self.completedAt = todo.completedAt
27-
self.isPinned = todo.isPinned
28-
self.title = todo.title
29-
self.content = todo.content
30-
self.dueDate = todo.dueDate
31-
self.tags = todo.tags
32-
self.category = todo.category
33-
}
34-
35-
init(state: State) {
36-
self.isCompleted = state.isCompleted
37-
self.completedAt = state.completedAt
38-
self.isPinned = state.isPinned
39-
self.title = state.title
40-
self.content = state.content
41-
self.dueDate = state.dueDate
42-
self.tags = Array(state.tags)
43-
self.category = state.category.category
44-
}
45-
}
46-
4714
struct State: Equatable {
4815
var isCompleted: Bool = false
4916
var completedAt: Date?
@@ -110,12 +77,11 @@ final class TodoEditorViewModel: Store {
11077
private let onCreateSuccess: (() -> Void)?
11178
private let onUpdateSuccess: ((Todo) -> Void)?
11279
private let id: String
113-
private let isCompleted: Bool
11480
private let isChecked: Bool
11581
private let number: Int?
11682
private let createdAt: Date?
11783
private let deletedAt: Date?
118-
private let originalDraft: Draft?
84+
private let originalDraft: TodoDraft?
11985

12086
var navigationTitle: String {
12187
if originalDraft == nil {
@@ -130,7 +96,7 @@ final class TodoEditorViewModel: Store {
13096

13197
var hasChanges: Bool {
13298
guard let originalDraft else { return true }
133-
return originalDraft != Draft(state: state)
99+
return originalDraft != makeTodoDraft()
134100
}
135101

136102
var isReadyToSubmit: Bool {
@@ -153,7 +119,6 @@ final class TodoEditorViewModel: Store {
153119
self.onCreateSuccess = onCreateSuccess
154120
self.onUpdateSuccess = nil
155121
self.id = UUID().uuidString
156-
self.isCompleted = false
157122
self.isChecked = false
158123
self.number = nil
159124
self.createdAt = nil
@@ -179,12 +144,11 @@ final class TodoEditorViewModel: Store {
179144
self.onCreateSuccess = nil
180145
self.onUpdateSuccess = onUpdateSuccess
181146
self.id = todo.id
182-
self.isCompleted = todo.isCompleted
183147
self.isChecked = todo.isChecked
184148
self.number = todo.number
185149
self.createdAt = todo.createdAt
186150
self.deletedAt = todo.deletedAt
187-
self.originalDraft = Draft(todo: todo)
151+
self.originalDraft = TodoDraft(todo: todo)
188152
state.isCompleted = todo.isCompleted
189153
state.completedAt = todo.completedAt
190154
state.isPinned = todo.isPinned

0 commit comments

Comments
 (0)