pidrio / src /components /AdminLogin.tsx
Raiff1982's picture
Upload 16 files
e495c9a verified
import React, { useState } from 'react';
import { Lock, AlertCircle } from 'lucide-react';
interface AdminLoginProps {
onLogin: (password: string) => void;
darkMode: boolean;
error?: string | null;
}
const AdminLogin: React.FC<AdminLoginProps> = ({ onLogin, darkMode, error }) => {
const [password, setPassword] = useState('');
const [isLoading, setIsLoading] = useState(false);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsLoading(true);
try {
await onLogin(password);
} catch (err: any) {
// Error is now handled by the parent component
} finally {
setIsLoading(false);
}
};
return (
<div className={`p-6 rounded-lg ${darkMode ? 'bg-gray-800' : 'bg-white'}`}>
<div className="flex items-center justify-center mb-6">
<Lock className={`${darkMode ? 'text-blue-400' : 'text-blue-600'} w-12 h-12`} />
</div>
<h2 className={`text-xl font-bold text-center mb-4 ${darkMode ? 'text-white' : 'text-gray-900'}`}>
Admin Access Required
</h2>
<p className={`text-sm text-center mb-6 ${darkMode ? 'text-gray-300' : 'text-gray-600'}`}>
Please enter the admin password to access settings
</p>
<form onSubmit={handleSubmit} className="space-y-4">
<div>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
placeholder="Enter admin password"
className={`w-full px-4 py-2 rounded-md border ${
darkMode
? 'bg-gray-700 border-gray-600 text-white placeholder-gray-400'
: 'bg-white border-gray-300 text-gray-900 placeholder-gray-500'
} focus:outline-none focus:ring-2 focus:ring-blue-500`}
disabled={isLoading}
/>
{error && (
<div className="mt-2 p-2 rounded-md bg-red-100 dark:bg-red-900 flex items-start space-x-2">
<AlertCircle className="flex-shrink-0 text-red-500 dark:text-red-400" size={16} />
<p className="text-sm text-red-600 dark:text-red-300">
{error}
</p>
</div>
)}
</div>
<button
type="submit"
disabled={isLoading}
className={`w-full py-2 px-4 rounded-md ${
darkMode
? 'bg-blue-600 hover:bg-blue-700 text-white'
: 'bg-blue-500 hover:bg-blue-600 text-white'
} transition-colors duration-200 ${isLoading ? 'opacity-50 cursor-not-allowed' : ''}`}
>
{isLoading ? 'Logging in...' : 'Login'}
</button>
</form>
</div>
);
};
export default AdminLogin;