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 @@ - - - - + + - - - + + + + + + + + + + + + + + + + + + + - + - + + - + - + + - - - + + + + - - - + + + + - - + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + - + - + + + + + + + + + + + + + + + + - + + - + - + + - - - + + + + - + - + + - + - + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + + + + + + - - + +