'use client' import { useState } from 'react' import { Users, Mail, Send } from 'lucide-react' import Modal from './Modal' import CollaboratorList from './CollaboratorList' import { inviteUserToList, getCollaborators } from '@/lib/sharing-actions' import { useRouter } from 'next/navigation' interface Collaborator { id: string permission: 'editor' | 'viewer' user: { id: string name: string | null email: string } } interface ShareListModalProps { isOpen: boolean onClose: () => void listId: string listTitle: string isOwner: boolean ownerId: string ownerName: string | null ownerEmail: string initialCollaborators?: Collaborator[] } export default function ShareListModal({ isOpen, onClose, listId, listTitle, isOwner, ownerId, ownerName, ownerEmail, initialCollaborators = [], }: ShareListModalProps) { const [email, setEmail] = useState('') const [permission, setPermission] = useState<'editor' | 'viewer'>('editor') const [isInviting, setIsInviting] = useState(false) const [error, setError] = useState(null) const [success, setSuccess] = useState(null) const [collaborators, setCollaborators] = useState(initialCollaborators) const router = useRouter() const handleInvite = async (e: React.FormEvent) => { e.preventDefault() setIsInviting(true) setError(null) setSuccess(null) try { await inviteUserToList(listId, email, permission) setSuccess(`Invitation sent to ${email}`) setEmail('') setPermission('editor') // Refresh collaborators list const updatedCollaborators = await getCollaborators(listId) as Collaborator[] setCollaborators(updatedCollaborators) router.refresh() } catch (err) { setError(err instanceof Error ? err.message : 'Failed to send invitation') } finally { setIsInviting(false) } } const handleClose = () => { setEmail('') setPermission('editor') setError(null) setSuccess(null) onClose() } return (
{/* Invite Form - Only show if user is owner */} {isOwner && (

Invite Collaborator

setEmail(e.target.value)} placeholder="colleague@example.com" required disabled={isInviting} className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-100 disabled:cursor-not-allowed" />
{error && (
{error}
)} {success && (
{success}
)}
)} {/* Collaborators List */}

{isOwner ? 'People with Access' : 'Collaborators'}

) }