import React, { useState } from 'react'; import { useMockAuth, MockAuthConfig } from './MockAuthProvider'; // Login Form Component export const MockAuthLoginForm: React.FC<{ onSuccess?: () => void }> = ({ onSuccess }) => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const { login } = useMockAuth(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); setError(''); const result = await login(email, password); if (result.success) { onSuccess?.(); } else { setError(result.error || 'Login failed'); } setIsLoading(false); }; return (

Login

{error && (
{error}
)}
setEmail(e.target.value)} required disabled={isLoading} />
setPassword(e.target.value)} required disabled={isLoading} />
); }; // Register Form Component export const MockAuthRegisterForm: React.FC<{ onSuccess?: () => void }> = ({ onSuccess }) => { const [formData, setFormData] = useState({ email: '', username: '', password: '', confirmPassword: '', firstName: '', lastName: '' }); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const { register } = useMockAuth(); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsLoading(true); setError(''); if (formData.password !== formData.confirmPassword) { setError('Passwords do not match'); setIsLoading(false); return; } const result = await register({ email: formData.email, username: formData.username, password: formData.password, firstName: formData.firstName, lastName: formData.lastName }); if (result.success) { onSuccess?.(); } else { setError(result.error || 'Registration failed'); } setIsLoading(false); }; const handleChange = (e: React.ChangeEvent) => { setFormData(prev => ({ ...prev, [e.target.name]: e.target.value })); }; return (

Register

{error && (
{error}
)}
); }; // User Profile Component export const MockAuthUserProfile: React.FC = () => { const { user, logout, updateProfile } = useMockAuth(); const [isEditing, setIsEditing] = useState(false); const [profile, setProfile] = useState(user?.profile || {}); const [isLoading, setIsLoading] = useState(false); const handleSave = async () => { setIsLoading(true); const success = await updateProfile(profile); if (success) { setIsEditing(false); } setIsLoading(false); }; const handleLogout = async () => { await logout(); }; if (!user) return null; return (

Profile

{user.email}
{user.username}
{user.roles.join(', ')}
{isEditing ? ( <>
setProfile(prev => ({ ...prev, firstName: e.target.value }))} disabled={isLoading} />
setProfile(prev => ({ ...prev, lastName: e.target.value }))} disabled={isLoading} />
setProfile(prev => ({ ...prev, avatar: e.target.value }))} disabled={isLoading} />
) : ( <>
{profile.firstName || 'Not set'}
{profile.lastName || 'Not set'}
{profile.avatar && (
Avatar
)} )}
); }; // Protected Route Component export const MockAuthProtectedRoute: React.FC<{ children: React.ReactNode; requiredRoles?: string[]; requiredPermissions?: string[]; fallback?: React.ReactNode; }> = ({ children, requiredRoles, requiredPermissions, fallback }) => { const { isAuthenticated, user, isLoading } = useMockAuth(); if (isLoading) { return
Loading...
; } if (!isAuthenticated) { return fallback ||
Please log in to access this page.
; } if (requiredRoles && !requiredRoles.some(role => user?.roles.includes(role))) { return fallback ||
You don't have permission to access this page.
; } if (requiredPermissions && !requiredPermissions.every(permission => user?.permissions.includes(permission))) { return fallback ||
You don't have the required permissions.
; } return <>{children}; }; // Auth Status Component export const MockAuthStatus: React.FC = () => { const { isAuthenticated, user, isLoading } = useMockAuth(); if (isLoading) { return
Loading...
; } if (!isAuthenticated) { return
Not logged in
; } return (
Welcome, {user?.profile?.firstName || user?.username}!
); }; // Default CSS styles export const MockAuthStyles: React.FC = () => ( );