71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
'use client'
|
||
import {ChangePasswordDialog} from '@/components/composites/dialogs/change-password-dialog'
|
||
import {RealnameAuthDialog} from '@/components/composites/dialogs/realname-auth-dialog'
|
||
import {useState, useEffect} from 'react'
|
||
import {User} from '@/lib/models'
|
||
|
||
export function PasswordSetupWrapper({profile}: {profile: User}) {
|
||
const [showPasswordDialog, setShowPasswordDialog] = useState(false)
|
||
const [showRealnameDialog, setShowRealnameDialog] = useState(false)
|
||
|
||
useEffect(() => {
|
||
// 每次profile变化时都检查是否需要显示弹窗
|
||
if (!profile.has_password) {
|
||
setShowPasswordDialog(true)
|
||
}
|
||
else if (!profile.id_token) {
|
||
setShowRealnameDialog(true)
|
||
}
|
||
}, [profile.has_password, profile.id_token])
|
||
|
||
const handleDismiss = (type: 'password' | 'realname') => {
|
||
// 可选:使用sessionStorage只在当前会话期间记住关闭状态
|
||
if (typeof window !== 'undefined') {
|
||
sessionStorage.setItem(`dismissed${type === 'password' ? 'PasswordSetup' : 'RealnameAuth'}`, 'true')
|
||
}
|
||
}
|
||
|
||
return (
|
||
<>
|
||
{showPasswordDialog && (
|
||
<ChangePasswordDialog
|
||
triggerClassName="hidden"
|
||
open={showPasswordDialog}
|
||
onOpenChange={(open) => {
|
||
setShowPasswordDialog(open)
|
||
if (!open) {
|
||
handleDismiss('password')
|
||
if (!profile.id_token) {
|
||
setShowRealnameDialog(true)
|
||
}
|
||
}
|
||
}}
|
||
onSuccess={() => {
|
||
setShowPasswordDialog(false)
|
||
if (!profile.id_token) {
|
||
setShowRealnameDialog(true)
|
||
}
|
||
}}
|
||
/>
|
||
)}
|
||
|
||
{showRealnameDialog && (
|
||
<RealnameAuthDialog
|
||
hasAuthenticated={!!profile.id_token}
|
||
triggerClassName="hidden"
|
||
open={showRealnameDialog}
|
||
onOpenChange={(open) => {
|
||
setShowRealnameDialog(open)
|
||
if (!open) {
|
||
handleDismiss('realname')
|
||
}
|
||
}}
|
||
onSuccess={() => {
|
||
setShowRealnameDialog(false)
|
||
}}
|
||
/>
|
||
)}
|
||
</>
|
||
)
|
||
}
|