feat(desktop): optimize sign out logic
This commit is contained in:
parent
7a354abeaa
commit
102710ef2f
|
|
@ -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()
|
||||
})
|
||||
}, [])
|
||||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue