sharenet/frontend/src/components/auth/login-button.tsx
continuist 376808431a
Some checks failed
Podman Rootless Demo / test-backend (push) Has been skipped
Podman Rootless Demo / test-frontend (push) Has been skipped
Podman Rootless Demo / build-backend (push) Has been skipped
Podman Rootless Demo / build-frontend (push) Failing after 9m0s
Podman Rootless Demo / deploy-prod (push) Has been skipped
Podman Rootless Demo / test-backend (pull_request) Has been skipped
Podman Rootless Demo / test-frontend (pull_request) Has been skipped
Podman Rootless Demo / build-backend (pull_request) Has been skipped
Podman Rootless Demo / build-frontend (pull_request) Failing after 8m29s
Podman Rootless Demo / deploy-prod (pull_request) Has been skipped
Add remaining files for feature
2025-11-01 10:31:10 -04:00

93 lines
No EOL
3.1 KiB
TypeScript

'use client';
import React, { useState } from 'react';
import { Button } from '@/components/ui/button';
import { PassportFilePicker } from './passport-file-picker';
import { CreatePassportDialog } from './create-passport-dialog';
import { ProfileManagementDialog } from './profile-management-dialog';
import { useAuth } from '@/lib/auth/context';
interface LoginButtonProps {
className?: string;
}
export function LoginButton({ className }: LoginButtonProps) {
const [showFilePicker, setShowFilePicker] = useState(false);
const [showCreatePassport, setShowCreatePassport] = useState(false);
const [showProfileManagement, setShowProfileManagement] = useState(false);
const [selectedPassportFile, setSelectedPassportFile] = useState<File | null>(null);
const handleFileSelected = async (file: File) => {
console.log('File selected:', file.name);
setSelectedPassportFile(file);
// The passport-file-picker will handle password input and decryption
// We just need to close the file picker dialog
setShowFilePicker(false);
};
const handleCreatePassport = () => {
setShowFilePicker(false);
setShowCreatePassport(true);
};
const handlePassportCreated = () => {
// Optional: Show success message or trigger login with the new passport
console.log('Passport created successfully');
};
return (
<>
<Button
onClick={() => setShowFilePicker(true)}
className={className}
variant="outline"
>
Login with Passport
</Button>
{showFilePicker && (
<div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50">
<div className="bg-white rounded-lg p-6 max-w-md w-full">
<div className="flex justify-between items-center mb-4">
<h3 className="text-lg font-semibold">Select Passport File</h3>
<button
onClick={() => setShowFilePicker(false)}
className="text-gray-400 hover:text-gray-600"
>
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
</svg>
</button>
</div>
<PassportFilePicker onFileSelected={handleFileSelected} />
<div className="mt-6 pt-6 border-t border-gray-200">
<div className="text-center">
<p className="text-sm text-gray-600 mb-3">Don't have a passport yet?</p>
<Button
onClick={handleCreatePassport}
variant="outline"
className="w-full"
>
Create New Passport
</Button>
</div>
</div>
</div>
</div>
)}
<CreatePassportDialog
open={showCreatePassport}
onOpenChange={setShowCreatePassport}
onPassportCreated={handlePassportCreated}
/>
<ProfileManagementDialog
open={showProfileManagement}
onOpenChange={setShowProfileManagement}
passportId={null}
/>
</>
);
}