'use client' import { useState } from 'react' import { UserMinus, ChevronDown } from 'lucide-react' import PermissionBadge from './PermissionBadge' import { updateCollaboratorPermission, removeCollaborator } 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 CollaboratorListProps { listId: string collaborators: Collaborator[] isOwner: boolean ownerId: string ownerName: string | null ownerEmail: string } export default function CollaboratorList({ listId, collaborators, isOwner, ownerId, ownerName, ownerEmail, }: CollaboratorListProps) { const [loadingStates, setLoadingStates] = useState>({}) const [error, setError] = useState(null) const router = useRouter() const handlePermissionChange = async (collaboratorId: string, newPermission: 'editor' | 'viewer') => { setLoadingStates(prev => ({ ...prev, [collaboratorId]: true })) setError(null) try { await updateCollaboratorPermission(listId, collaboratorId, newPermission) router.refresh() } catch (err) { setError(err instanceof Error ? err.message : 'Failed to update permission') } finally { setLoadingStates(prev => ({ ...prev, [collaboratorId]: false })) } } const handleRemove = async (collaboratorId: string) => { if (!confirm('Are you sure you want to remove this collaborator?')) { return } setLoadingStates(prev => ({ ...prev, [collaboratorId]: true })) setError(null) try { await removeCollaborator(listId, collaboratorId) router.refresh() } catch (err) { setError(err instanceof Error ? err.message : 'Failed to remove collaborator') setLoadingStates(prev => ({ ...prev, [collaboratorId]: false })) } } return (
{error && (
{error}
)} {/* Owner */}

{ownerName || ownerEmail}

{ownerName && (

{ownerEmail}

)}
{/* Collaborators */} {collaborators.length === 0 ? (

No collaborators yet. Share this list to collaborate!

) : ( collaborators.map((collaborator) => (

{collaborator.user.name || collaborator.user.email}

{collaborator.user.name && (

{collaborator.user.email}

)}
{isOwner ? ( <>
) : ( )}
)) )}
) }