'use client' import { useState, useEffect } from 'react' import { InvitationCard } from '@/components/InvitationCard' import { InviteArtistModal } from '@/components/InviteArtistModal' export default function LabelInvitationsPage() { const [label, setLabel] = useState(null) const [invitations, setInvitations] = useState([]) const [loading, setLoading] = useState(true) const [isInviteModalOpen, setIsInviteModalOpen] = useState(false) const [filter, setFilter] = useState<'all' | 'pending' | 'accepted' | 'declined'>('all') useEffect(() => { fetchInvitations() }, []) const fetchInvitations = async () => { try { // Check authentication const userRes = await fetch('/api/users/me') if (!userRes.ok) { window.location.href = '/login' return } const userData = await userRes.json() // Fetch user's label const labelRes = await fetch(`/api/users/${userData.user.id}/label`) if (!labelRes.ok) { window.location.href = '/label/create' return } const labelData = await labelRes.json() setLabel(labelData.label) // Fetch invitations const invitationsRes = await fetch(`/api/labels/${labelData.label.id}/invitations`) if (invitationsRes.ok) { const invitationsData = await invitationsRes.json() setInvitations(invitationsData.invitations || []) } } catch (error) { console.error('Failed to fetch invitations:', error) } finally { setLoading(false) } } const handleCancelInvitation = async (invitationId: string) => { if (!confirm('Are you sure you want to cancel this invitation?')) { return } try { const res = await fetch(`/api/invitations/${invitationId}`, { method: 'DELETE' }) if (res.ok) { setInvitations(invitations.filter(inv => inv.id !== invitationId)) } else { alert('Failed to cancel invitation') } } catch (error) { console.error('Failed to cancel invitation:', error) alert('Network error') } } const filteredInvitations = invitations.filter(inv => { if (filter === 'all') return true return inv.status === filter.toUpperCase() }) const counts = { all: invitations.length, pending: invitations.filter(inv => inv.status === 'PENDING').length, accepted: invitations.filter(inv => inv.status === 'ACCEPTED').length, declined: invitations.filter(inv => inv.status === 'DECLINED').length } if (loading) { return (

Loading invitations...

) } if (!label) { return (

Label not found

Go to Dashboard
) } return (
{/* Header */}

Invitations

Manage your artist invitations

{/* Filter Tabs */}
{(['all', 'pending', 'accepted', 'declined'] as const).map((status) => ( ))}
{/* Invitations List */} {filteredInvitations.length > 0 ? (
{filteredInvitations.map((invitation) => ( ))}
) : (

{filter === 'all' ? 'No invitations yet' : `No ${filter} invitations`}

)}
{/* Invite Modal */} setIsInviteModalOpen(false)} onInviteSent={() => { setIsInviteModalOpen(false) fetchInvitations() }} />
) }