UNPKG

@frank-auth/react

Version:

Flexible and customizable React UI components for Frank Authentication

154 lines 4.9 kB
import { ChangePasswordRequest, User, UserProfileUpdateRequest } from '@frank-auth/client'; import { AuthError } from '../provider/types'; export interface UseUserReturn { user: User | null; isLoaded: boolean; isLoading: boolean; error: AuthError | null; updateProfile: (data: UserProfileUpdateRequest) => Promise<User>; changePassword: (data: ChangePasswordRequest) => Promise<void>; deleteAccount: () => Promise<void>; updateEmail: (email: string) => Promise<void>; verifyEmail: (code: string) => Promise<void>; resendEmailVerification: () => Promise<void>; updatePhone: (phone: string) => Promise<void>; verifyPhone: (code: string) => Promise<void>; resendPhoneVerification: () => Promise<void>; updateProfileImage: (imageUrl: string) => Promise<User>; removeProfileImage: () => Promise<User>; updateMetadata: (metadata: Record<string, any>) => Promise<User>; firstName: string | null; lastName: string | null; fullName: string | null; email: string | null; phone: string | null; profileImageUrl: string | null; username: string | null; isEmailVerified: boolean; isPhoneVerified: boolean; needsEmailVerification: boolean; needsPhoneVerification: boolean; isActive: boolean; isBlocked: boolean; createdAt: Date | null; lastSignInAt: Date | null; } /** * User management hook providing access to user profile and account operations * * @example Basic profile management * ```tsx * import { useUser } from '@frank-auth/react'; * * function UserProfile() { * const { user, updateProfile, isLoading } = useUser(); * * const handleUpdate = async (data) => { * try { * await updateProfile(data); * toast.success('Profile updated!'); * } catch (error) { * toast.error('Failed to update profile'); * } * }; * * if (!user) return <div>Please sign in</div>; * * return ( * <form onSubmit={(e) => { * e.preventDefault(); * const formData = new FormData(e.target); * handleUpdate({ * firstName: formData.get('firstName'), * lastName: formData.get('lastName'), * }); * }}> * <input name="firstName" defaultValue={user.firstName} /> * <input name="lastName" defaultValue={user.lastName} /> * <button type="submit" disabled={isLoading}> * Update Profile * </button> * </form> * ); * } * ``` * * @example Email verification * ```tsx * function EmailVerification() { * const { needsEmailVerification, verifyEmail, resendEmailVerification } = useUser(); * const [code, setCode] = useState(''); * * if (!needsEmailVerification) return null; * * return ( * <div> * <p>Please verify your email address</p> * <input * value={code} * onChange={(e) => setCode(e.target.value)} * placeholder="Enter verification code" * /> * <button onClick={() => verifyEmail(code)}> * Verify * </button> * <button onClick={resendEmailVerification}> * Resend Code * </button> * </div> * ); * } * ``` */ export declare function useUser(): UseUserReturn; /** * Hook for user profile data only (no methods) */ export declare function useUserProfile(): { user: User | null; firstName: string | null; lastName: string | null; fullName: string | null; email: string | null; phone: string | null; profileImageUrl: string | null; username: string | null; isEmailVerified: boolean; isPhoneVerified: boolean; isActive: boolean; isBlocked: boolean; createdAt: Date | null; lastSignInAt: Date | null; }; /** * Hook for user verification operations */ export declare function useUserVerification(): { isEmailVerified: boolean; isPhoneVerified: boolean; needsEmailVerification: boolean; needsPhoneVerification: boolean; verifyEmail: (code: string) => Promise<void>; verifyPhone: (code: string) => Promise<void>; resendEmailVerification: () => Promise<void>; resendPhoneVerification: () => Promise<void>; isLoading: boolean; error: AuthError | null; needsVerification: boolean; }; /** * Hook for user profile management operations */ export declare function useUserActions(): { updateProfile: (data: UserProfileUpdateRequest) => Promise<User>; changePassword: (data: ChangePasswordRequest) => Promise<void>; deleteAccount: () => Promise<void>; updateEmail: (email: string) => Promise<void>; updatePhone: (phone: string) => Promise<void>; updateProfileImage: (imageUrl: string) => Promise<User>; removeProfileImage: () => Promise<User>; updateMetadata: (metadata: Record<string, any>) => Promise<User>; isLoading: boolean; error: AuthError | null; }; //# sourceMappingURL=use-user.d.ts.map