diff --git a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift index 8fe10156..6bfc5b77 100644 --- a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift +++ b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift @@ -66,6 +66,25 @@ struct UserSignInView: View { self._viewModel = StateObject(wrappedValue: UserSignInViewModel(server: server)) } + // MARK: - Handle Sign In + + @MainActor + private func handleSignIn(_ event: UserSignInViewModel.Event) { + switch event { + case let .duplicateUser(duplicateUser): + self.duplicateUser = duplicateUser + isPresentingDuplicateUser = true + case let .error(eventError): + error = eventError + case let .signedIn(user): + router.dismissCoordinator() + + Defaults[.lastSignedInUserID] = .signedIn(userID: user.id) + Container.shared.currentUserSession.reset() + Notifications[.didSignIn].post() + } + } + // MARK: - Sign In Section @ViewBuilder @@ -172,21 +191,10 @@ struct UserSignInView: View { } trailingContentView: { publicUsersSection } - .onReceive(viewModel.events) { event in - switch event { - case let .duplicateUser(duplicateUser): - self.duplicateUser = duplicateUser - isPresentingDuplicateUser = true - case let .error(eventError): - error = eventError - case let .signedIn(user): - router.dismissCoordinator() - - Defaults[.lastSignedInUserID] = .signedIn(userID: user.id) - Container.shared.currentUserSession.reset() - Notifications[.didSignIn].post() - } - } + .onReceive( + viewModel.events, + perform: handleSignIn + ) .onFirstAppear { focusedField = .username viewModel.send(.getPublicData)