diff --git a/apps/desktop/src/renderer/src/hooks/biz/useSignOut.ts b/apps/desktop/src/renderer/src/hooks/biz/useSignOut.ts deleted file mode 100644 index 18e41e931..000000000 --- a/apps/desktop/src/renderer/src/hooks/biz/useSignOut.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { clearStorage } from "@follow/utils/ns" -import { useCallback } from "react" - -import { setWhoami } from "~/atoms/user" -import { QUERY_PERSIST_KEY } from "~/constants" -import { signOut } from "~/lib/auth" -import { handleSessionChanges } from "~/queries/auth" -import { clearLocalPersistStoreData } from "~/store/utils/clear" - -export const useSignOut = () => - useCallback(async () => { - if (window.__RN__) { - window.ReactNativeWebView?.postMessage("sign-out") - return - } - - // Clear query cache - localStorage.removeItem(QUERY_PERSIST_KEY) - - // setLoginModalShow(true) - setWhoami(null) - - // Clear local storage - clearStorage() - - // clear local store data - await clearLocalPersistStoreData() - // Sign out - await signOut().then(() => { - handleSessionChanges() - }) - }, []) diff --git a/apps/desktop/src/renderer/src/modules/user/ProfileButton.electron.tsx b/apps/desktop/src/renderer/src/modules/user/ProfileButton.electron.tsx index 8b67cc4d1..0cee2a0d1 100644 --- a/apps/desktop/src/renderer/src/modules/user/ProfileButton.electron.tsx +++ b/apps/desktop/src/renderer/src/modules/user/ProfileButton.electron.tsx @@ -22,12 +22,11 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "~/components/ui/dropdown-menu/dropdown-menu" -import { useSignOut } from "~/hooks/biz/useSignOut" import { UrlBuilder } from "~/lib/url-builder" import { useAchievementModal } from "~/modules/achievement/hooks" import { usePresentUserProfileModal } from "~/modules/profile/hooks" import { useSettingModal } from "~/modules/settings/modal/use-setting-modal-hack" -import { useSession } from "~/queries/auth" +import { signOut, useSession } from "~/queries/auth" import { useWallet } from "~/queries/wallet" import { useActivationModal } from "../activation" @@ -47,7 +46,6 @@ export type ProfileButtonProps = LoginProps & { export const ProfileButton: FC = memo((props) => { const { status, session } = useSession() const { user } = session || {} - const signOut = useSignOut() const settingModalPresent = useSettingModal() const presentUserProfile = usePresentUserProfileModal("dialog") const presentAchievement = useAchievementModal() diff --git a/apps/desktop/src/renderer/src/modules/user/ProfileButton.mobile.tsx b/apps/desktop/src/renderer/src/modules/user/ProfileButton.mobile.tsx index 002f6e89a..892821f8c 100644 --- a/apps/desktop/src/renderer/src/modules/user/ProfileButton.mobile.tsx +++ b/apps/desktop/src/renderer/src/modules/user/ProfileButton.mobile.tsx @@ -9,8 +9,8 @@ import { Link } from "react-router" import rsshubLogoUrl from "~/assets/rsshub-icon.png?url" import { useUserRole, useWhoami } from "~/atoms/user" -import { useSignOut } from "~/hooks/biz/useSignOut" import { UrlBuilder } from "~/lib/url-builder" +import { signOut } from "~/queries/auth" import { useWallet } from "~/queries/wallet" import { useAchievementModal } from "../achievement/hooks" @@ -26,8 +26,6 @@ import { UserAvatar } from "./UserAvatar" export const ProfileButton: FC = () => { const user = useWhoami() - const signOut = useSignOut() - const presentUserProfile = usePresentUserProfileModal("dialog") const presentAchievement = useAchievementModal() const { t } = useTranslation() diff --git a/apps/desktop/src/renderer/src/pages/settings/(settings)/profile.tsx b/apps/desktop/src/renderer/src/pages/settings/(settings)/profile.tsx index b0d7f40bb..1616be1ca 100644 --- a/apps/desktop/src/renderer/src/pages/settings/(settings)/profile.tsx +++ b/apps/desktop/src/renderer/src/pages/settings/(settings)/profile.tsx @@ -3,7 +3,6 @@ import { Divider } from "@follow/components/ui/divider/Divider.js" import { Label } from "@follow/components/ui/label/index.js" import { useModalStack } from "~/components/ui/modal/stacked/hooks" -import { signOut } from "~/lib/auth" import { isInMAS } from "~/lib/utils" import { AccountManagement } from "~/modules/profile/account-management" import { EmailManagement } from "~/modules/profile/email-management" @@ -12,7 +11,7 @@ import { TwoFactor } from "~/modules/profile/two-factor" import { UpdatePasswordForm } from "~/modules/profile/update-password-form" import { SettingsTitle } from "~/modules/settings/title" import { defineSettingPageData } from "~/modules/settings/utils" -import { handleSessionChanges } from "~/queries/auth" +import { signOut } from "~/queries/auth" const iconName = "i-mgc-user-setting-cute-re" const priority = 1090 @@ -52,13 +51,7 @@ export function Component() { Are you sure you want to delete your account? This action is irreversible and may take up to two days to take effect.

- diff --git a/apps/desktop/src/renderer/src/queries/auth.ts b/apps/desktop/src/renderer/src/queries/auth.ts index 19b78225c..c8733efaa 100644 --- a/apps/desktop/src/renderer/src/queries/auth.ts +++ b/apps/desktop/src/renderer/src/queries/auth.ts @@ -1,9 +1,13 @@ import type { AuthSession } from "@follow/shared/hono" +import { clearStorage } from "@follow/utils/ns" import type { FetchError } from "ofetch" +import { setWhoami } from "~/atoms/user" +import { QUERY_PERSIST_KEY } from "~/constants" import { useAuthQuery } from "~/hooks/common" -import { getAccountInfo, getSession } from "~/lib/auth" +import { getAccountInfo, getSession, signOut as signOutFn } from "~/lib/auth" import { defineQuery } from "~/lib/defineQuery" +import { clearLocalPersistStoreData } from "~/store/utils/clear" export const auth = { getSession: () => defineQuery(["auth", "session"], () => getSession()), @@ -69,3 +73,26 @@ export const useSession = (options?: { enabled?: boolean }) => { export const handleSessionChanges = () => { window.location.reload() } + +export const signOut = async () => { + if (window.__RN__) { + window.ReactNativeWebView?.postMessage("sign-out") + return + } + + // Clear query cache + localStorage.removeItem(QUERY_PERSIST_KEY) + + // setLoginModalShow(true) + setWhoami(null) + + // Clear local storage + clearStorage() + + // clear local store data + await clearLocalPersistStoreData() + // Sign out + await signOutFn().then(() => { + handleSessionChanges() + }) +}