Skip to content

Commit a00f5c7

Browse files
authored
[#575] TodoEditorView에 TCA를 적용한다 (#593)
* refactor: TodoEditorView TCA 전환 * chore: TodoEditorFeature 상태 관리 테스트 추가 * refactor: LoadingFeature 적용 * refactor: 불필요 State, Action 제거 * refactor: 불필요 이펙트 반환 제거 * refactor: BindingAction 적용 * refactor: TodoEditorFeature 불변 상태 정리 * refactor: TodoEditorFeature 탭 타입 이름 정리 * refactor: sheet용 State 분리 * refactor: cancel 액션 구현 * refactor: Todo Store 생명주기 보존 * refactor: 화면 소유 Store 생명주기 정리
1 parent 04c7b24 commit a00f5c7

13 files changed

Lines changed: 1129 additions & 485 deletions

Application/DevLogPresentation/Sources/Home/Detail/TodoDetailView.swift

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ struct TodoDetailView: View {
1414
@Environment(\.diContainer) private var container: DIContainer
1515
@Environment(\.openWindow) private var openWindow
1616
@Environment(\.isiOSAppOnMac) private var isiOSAppOnMac
17-
@Bindable var store: StoreOf<TodoDetailFeature>
17+
@State var store: StoreOf<TodoDetailFeature>
1818

1919
var body: some View {
2020
ZStack {
@@ -88,16 +88,19 @@ struct TodoDetailView: View {
8888
case .editor:
8989
if let todo = store.todo {
9090
TodoEditorView(
91-
viewModel: TodoEditorViewModel(
92-
todo: todo,
93-
fetchPreferencesUseCase: container.resolve(FetchTodoCategoryPreferencesUseCase.self),
94-
fetchReferenceItemsUseCase: container.resolve(FetchReferenceItemsUseCase.self),
95-
upsertTodoUseCase: container.resolve(UpsertTodoUseCase.self),
96-
onUpdateSuccess: { todo in
97-
store.send(.setFullScreenCover(nil))
98-
store.send(.setTodo(todo))
99-
}
100-
)
91+
store: Store(initialState: TodoEditorFeature.State(todo: todo)) {
92+
TodoEditorFeature()
93+
} withDependencies: {
94+
$0.fetchTodoCategoryPreferencesUseCase = container.resolve(
95+
FetchTodoCategoryPreferencesUseCase.self
96+
)
97+
$0.fetchReferenceItemsUseCase = container.resolve(FetchReferenceItemsUseCase.self)
98+
$0.upsertTodoUseCase = container.resolve(UpsertTodoUseCase.self)
99+
},
100+
onUpdateSuccess: { todo in
101+
store.send(.setFullScreenCover(nil))
102+
store.send(.setTodo(todo))
103+
}
101104
)
102105
}
103106
}

0 commit comments

Comments
 (0)