diff --git a/Application/DevLogApp/Sources/Resource/Localizable.xcstrings b/Application/DevLogApp/Sources/Resource/Localizable.xcstrings
index fc0aec2c..720e6cea 100644
--- a/Application/DevLogApp/Sources/Resource/Localizable.xcstrings
+++ b/Application/DevLogApp/Sources/Resource/Localizable.xcstrings
@@ -2,6 +2,7 @@
"sourceLanguage" : "ko",
"strings" : {
"" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -13,6 +14,7 @@
"shouldTranslate" : false
},
"#%lld" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -24,6 +26,7 @@
"shouldTranslate" : false
},
"%lld" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -425,36 +428,36 @@
}
}
},
- "home_select_detail" : {
+ "home_recent_title" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Select an item."
+ "value" : "Recently Updated"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "항목을 선택해주세요."
+ "value" : "최근 수정"
}
}
}
},
- "home_recent_title" : {
+ "home_select_detail" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Recently Updated"
+ "value" : "Select an item."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "최근 수정"
+ "value" : "항목을 선택해주세요."
}
}
}
@@ -528,6 +531,7 @@
}
},
"https://" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -537,70 +541,70 @@
}
}
},
- "login_apple_sign_in" : {
+ "login_alert_email_unavailable_message" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Sign in with Apple"
+ "value" : "The selected GitHub account's email could not be verified, so sign in could not be completed. Check the GitHub account settings and try again."
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "애플 계정으로 로그인"
+ "value" : "선택한 GitHub 계정의 이메일 정보를 확인할 수 없어 로그인할 수 없어요. GitHub 계정 설정을 확인한 뒤 다시 시도해주세요."
}
}
}
},
- "login_github_sign_in" : {
+ "login_alert_email_unavailable_title" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Sign in with GitHub"
+ "value" : "Unable to Verify Email"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "깃헙 계정으로 로그인"
+ "value" : "이메일 확인 불가"
}
}
}
},
- "login_alert_email_unavailable_message" : {
+ "login_apple_sign_in" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "The selected GitHub account's email could not be verified, so sign in could not be completed. Check the GitHub account settings and try again."
+ "value" : "Sign in with Apple"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "선택한 GitHub 계정의 이메일 정보를 확인할 수 없어 로그인할 수 없어요. GitHub 계정 설정을 확인한 뒤 다시 시도해주세요."
+ "value" : "애플 계정으로 로그인"
}
}
}
},
- "login_alert_email_unavailable_title" : {
+ "login_github_sign_in" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Unable to Verify Email"
+ "value" : "Sign in with GitHub"
}
},
"ko" : {
"stringUnit" : {
"state" : "translated",
- "value" : "이메일 확인 불가"
+ "value" : "깃헙 계정으로 로그인"
}
}
}
@@ -1931,23 +1935,6 @@
}
}
},
- "today_select_detail" : {
- "extractionState" : "manual",
- "localizations" : {
- "en" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Select a todo."
- }
- },
- "ko" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Todo를 선택해주세요."
- }
- }
- }
- },
"today_due_overdue" : {
"extractionState" : "manual",
"localizations" : {
@@ -2322,6 +2309,23 @@
}
}
},
+ "today_select_detail" : {
+ "extractionState" : "manual",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Select a todo."
+ }
+ },
+ "ko" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Todo를 선택해주세요."
+ }
+ }
+ }
+ },
"today_summary_all" : {
"extractionState" : "manual",
"localizations" : {
@@ -2391,6 +2395,7 @@
}
},
"TODO" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2436,6 +2441,7 @@
},
"todo_category_doc" : {
"comment" : "Todo category: Documentation",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2453,6 +2459,7 @@
},
"todo_category_etc" : {
"comment" : "Todo category: Etc",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2470,6 +2477,7 @@
},
"todo_category_feature" : {
"comment" : "Todo category: Feature",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2487,6 +2495,7 @@
},
"todo_category_improvement" : {
"comment" : "Todo category: Improvement",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2504,6 +2513,7 @@
},
"todo_category_issue" : {
"comment" : "Todo category: Issue",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2521,6 +2531,7 @@
},
"todo_category_research" : {
"comment" : "Todo category: Research",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2538,6 +2549,7 @@
},
"todo_category_review" : {
"comment" : "Todo category: Review",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2555,6 +2567,7 @@
},
"todo_category_test" : {
"comment" : "Todo category: Test",
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -2689,23 +2702,6 @@
}
}
},
- "todo_write" : {
- "extractionState" : "manual",
- "localizations" : {
- "en" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Write"
- }
- },
- "ko" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "작성"
- }
- }
- }
- },
"todo_editor_description_optional" : {
"extractionState" : "manual",
"localizations" : {
@@ -3386,7 +3382,25 @@
}
}
},
+ "todo_write" : {
+ "extractionState" : "manual",
+ "localizations" : {
+ "en" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Write"
+ }
+ },
+ "ko" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "작성"
+ }
+ }
+ }
+ },
"Todos" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -3397,6 +3411,7 @@
}
},
"Web Page" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -3407,6 +3422,7 @@
}
},
"Web Pages" : {
+ "extractionState" : "stale",
"localizations" : {
"en" : {
"stringUnit" : {
@@ -3435,4 +3451,4 @@
}
},
"version" : "1.0"
-}
+}
\ No newline at end of file
diff --git a/Application/DevLogPresentation/Sources/Main/MainView.swift b/Application/DevLogPresentation/Sources/Main/MainView.swift
index ecc6d36b..604b063f 100644
--- a/Application/DevLogPresentation/Sources/Main/MainView.swift
+++ b/Application/DevLogPresentation/Sources/Main/MainView.swift
@@ -46,6 +46,8 @@ struct MainView: View {
homeViewCoordinator.fetchData()
} else if newValue == .today {
todayViewCoordinator.fetchData()
+ } else if newValue == .profile {
+ profileViewCoordinator.fetchData()
}
}
.alert(
diff --git a/Application/DevLogPresentation/Sources/Profile/ProfileView.swift b/Application/DevLogPresentation/Sources/Profile/ProfileView.swift
index 22c3cdeb..b19f37d4 100644
--- a/Application/DevLogPresentation/Sources/Profile/ProfileView.swift
+++ b/Application/DevLogPresentation/Sources/Profile/ProfileView.swift
@@ -118,7 +118,6 @@ struct ProfileView: View {
AccountView(viewModel: coordinator.makeAccountViewModel())
}
}
- .onAppear { coordinator.viewModel.send(.onAppear) }
.onChange(of: focused) { _, newValue in
withAnimation {
coordinator.viewModel.send(.updateStatusTextFieldFocus(newValue))
diff --git a/Application/DevLogPresentation/Sources/Profile/ProfileViewCoordinator.swift b/Application/DevLogPresentation/Sources/Profile/ProfileViewCoordinator.swift
index 4726e92f..e1cefe4d 100644
--- a/Application/DevLogPresentation/Sources/Profile/ProfileViewCoordinator.swift
+++ b/Application/DevLogPresentation/Sources/Profile/ProfileViewCoordinator.swift
@@ -38,6 +38,10 @@ final class ProfileViewCoordinator {
)
}
+ func fetchData() {
+ viewModel.send(.fetchData)
+ }
+
func makeAccountViewModel() -> AccountViewModel {
AccountViewModel(
fetchProvidersUseCase: container.resolve(FetchAuthProvidersUseCase.self),
diff --git a/Application/DevLogPresentation/Sources/Profile/ProfileViewModel.swift b/Application/DevLogPresentation/Sources/Profile/ProfileViewModel.swift
index 7ab7aa54..af46da00 100644
--- a/Application/DevLogPresentation/Sources/Profile/ProfileViewModel.swift
+++ b/Application/DevLogPresentation/Sources/Profile/ProfileViewModel.swift
@@ -34,7 +34,7 @@ final class ProfileViewModel: Store {
}
enum Action {
- case onAppear, refresh
+ case fetchData, refresh
case networkStatusChanged(Bool)
case setLoading(Bool)
case setAlert(Bool)
@@ -98,7 +98,7 @@ final class ProfileViewModel: Store {
var state = self.state
var effects: [SideEffect] = []
switch action {
- case .onAppear, .refresh:
+ case .fetchData, .refresh:
if state.selectedQuarterStart == nil {
guard let quarterStart = quarterStart(for: Date()) else { break }
state.selectedQuarterStart = quarterStart
diff --git a/Application/DevLogPresentation/Tests/WebPage/DeleteWebPageTests.swift b/Application/DevLogPresentation/Tests/WebPage/DeleteWebPageTests.swift
index 45c54902..78726cf5 100644
--- a/Application/DevLogPresentation/Tests/WebPage/DeleteWebPageTests.swift
+++ b/Application/DevLogPresentation/Tests/WebPage/DeleteWebPageTests.swift
@@ -45,7 +45,7 @@ struct DeleteWebPageTests {
networkConnectivityUseCase: observeNetworkConnectivityUseCaseSpy
)
- homeViewModel.send(.loadInitialData)
+ homeViewModel.send(.fetchData)
await waitUntil {
!homeViewModel.state.webPages.isEmpty
}
@@ -97,7 +97,7 @@ struct DeleteWebPageTests {
networkConnectivityUseCase: observeNetworkConnectivityUseCaseSpy
)
- homeViewModel.send(.loadInitialData)
+ homeViewModel.send(.fetchData)
await waitUntil {
!homeViewModel.state.webPages.isEmpty
}
diff --git a/docs/DevLog.drawio b/docs/DevLog.drawio
index 03ebce5b..2bed4e6e 100644
--- a/docs/DevLog.drawio
+++ b/docs/DevLog.drawio
@@ -103,49 +103,83 @@
-
+
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
-
-
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
@@ -155,110 +189,195 @@
-
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
-
+
-
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
-
+
-
+
+
-
-
-
+
+
+
+
-
+
-
+
+
-
+
-
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+
+
+
+
+
-
-
+
+