@frank-auth/react
Version:
Flexible and customizable React UI components for Frank Authentication
154 lines • 4.9 kB
TypeScript
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