Skip to content

Commit b29ec97

Browse files
authored
[#582] RootView에 TCA를 적용한다 (#623)
* feat: store 1차 구현 * refactor: AlertState 적용 * refactor: SheetState 적용 * refactor: RootFeature BindingAction 적용 * refactor: RootFeature 뷰 스토어 액션 분리 제거 * refactor: sheetContent 분리 * chore: 불필요 뷰모델 파일 및 참조 제거 * refactor: 불필요 receive(on:) 제거 * refactor: 옵셔널 주입 제거
1 parent 94a5dc0 commit b29ec97

25 files changed

Lines changed: 757 additions & 2316 deletions

Application/DevLogPresentation/Sources/Home/Editor/TodoEditorFeature.swift

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ extension DependencyValues {
230230
set { self[UpsertTodoUseCaseKey.self] = newValue }
231231
}
232232

233-
var trackAnalyticsEventUseCase: TrackAnalyticsEventUseCase? {
233+
var trackAnalyticsEventUseCase: TrackAnalyticsEventUseCase {
234234
get { self[TrackAnalyticsEventUseCaseKey.self] }
235235
set { self[TrackAnalyticsEventUseCaseKey.self] = newValue }
236236
}
@@ -257,7 +257,17 @@ private enum UpsertTodoUseCaseKey: DependencyKey {
257257
}
258258

259259
private enum TrackAnalyticsEventUseCaseKey: DependencyKey {
260-
static let liveValue: TrackAnalyticsEventUseCase? = nil
260+
static var liveValue: TrackAnalyticsEventUseCase {
261+
preconditionFailure("TrackAnalyticsEventUseCase must be provided.")
262+
}
263+
264+
static var testValue: TrackAnalyticsEventUseCase {
265+
NoOpTrackAnalyticsEventUseCase()
266+
}
267+
}
268+
269+
private struct NoOpTrackAnalyticsEventUseCase: TrackAnalyticsEventUseCase {
270+
func execute(_ event: AnalyticsEvent) { }
261271
}
262272

263273
private extension TodoEditorFeature {
@@ -294,7 +304,7 @@ private extension TodoEditorFeature {
294304
await send(.loading(.begin(target: .default, mode: .immediate)))
295305
do {
296306
try await upsertTodoUseCase.execute(draft)
297-
trackAnalyticsEventUseCase?.execute(.todoCreate)
307+
trackAnalyticsEventUseCase.execute(.todoCreate)
298308
await send(.createSucceeded)
299309
} catch {
300310
await send(.saveFailed)

Application/DevLogPresentation/Sources/Home/Home/HomeFeature+Effects.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ extension HomeFeature {
2020
func observeNetworkConnectivityEffect() -> Effect<Action> {
2121
.publisher { [networkConnectivityUseCase] in
2222
networkConnectivityUseCase.observe()
23-
.receive(on: DispatchQueue.main)
2423
.map { .store(.networkStatusChanged($0)) }
2524
}
2625
.cancellable(id: CancelID.networkConnectivity, cancelInFlight: true)
@@ -74,7 +73,7 @@ extension HomeFeature {
7473
await send(.loading(.begin(target: LoadingTarget.overlay.target, mode: .delayed)))
7574
do {
7675
try await addWebPageUseCase.execute(urlString)
77-
trackAnalyticsEventUseCase?.execute(.webPageCreate)
76+
trackAnalyticsEventUseCase.execute(.webPageCreate)
7877
let pages = try await fetchWebPagesUseCase.execute("")
7978
await send(.store(.updateWebPages(pages.map(WebPageItem.init(from:)))))
8079
} catch {

Application/DevLogPresentation/Sources/Home/List/TodoListFeature+Effects.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ extension TodoListFeature {
4444
todo.updatedAt = now
4545
try await upsertTodoUseCase.execute(todo)
4646
if todo.isCompleted {
47-
trackAnalyticsEventUseCase?.execute(.todoComplete)
47+
trackAnalyticsEventUseCase.execute(.todoComplete)
4848
}
4949
guard let todoListItem = TodoListItem(from: todo) else {
5050
await send(.store(.setAlert(true)))

Application/DevLogPresentation/Sources/Main/MainFeature.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private extension MainFeature {
119119

120120
func trackScreenViewEffect(_ screenName: String) -> Effect<Action> {
121121
.run { [trackAnalyticsEventUseCase] _ in
122-
trackAnalyticsEventUseCase?.execute(.screenView(screenName))
122+
trackAnalyticsEventUseCase.execute(.screenView(screenName))
123123
}
124124
}
125125

Application/DevLogPresentation/Sources/Profile/ProfileFeature.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,6 @@ private extension ProfileFeature {
195195
func observeNetworkConnectivityEffect() -> Effect<Action> {
196196
.publisher { [networkConnectivityUseCase] in
197197
networkConnectivityUseCase.observe()
198-
.receive(on: DispatchQueue.main)
199198
.map(Action.networkStatusChanged)
200199
}
201200
.cancellable(id: CancelID.networkConnectivity, cancelInFlight: true)

0 commit comments

Comments
 (0)