feat(desktop): optimize sign out logic

This commit is contained in:
DIYgod 2025-04-16 12:39:44 +08:00
parent 7a354abeaa
commit 102710ef2f
No known key found for this signature in database
5 changed files with 32 additions and 48 deletions

View File

@ -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()
})
}, [])

View File

@ -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<ProfileButtonProps> = memo((props) => {
const { status, session } = useSession()
const { user } = session || {}
const signOut = useSignOut()
const settingModalPresent = useSettingModal()
const presentUserProfile = usePresentUserProfileModal("dialog")
const presentAchievement = useAchievementModal()

View File

@ -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<ProfileButtonProps> = () => {
const user = useWhoami()
const signOut = useSignOut()
const presentUserProfile = usePresentUserProfileModal("dialog")
const presentAchievement = useAchievementModal()
const { t } = useTranslation()

View File

@ -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.
</p>
<Button
variant="outline"
onClick={async () => {
await signOut()
handleSessionChanges()
}}
>
<Button variant="outline" onClick={signOut}>
Delete
</Button>
</div>

View File

@ -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()
})
}