{event?.name || 'Event'} - Cactoide
{#if error && !event}
⚠️

Event Not Found

The event you're looking for doesn't exist or has been removed.

{:else if event}

{event.name}

{formatDate(event.date)} - {formatTime(event.time)}

{event.location}

{event.type === 'limited' ? 'Limited' : 'Unlimited'} {event.visibility === 'public' ? 'Public' : 'Private'}
{#if event.type === 'limited' && event.attendee_limit}

Capacity

{rsvps.length}/{event.attendee_limit}

{/if}

Join This Event

{#if event.type === 'limited' && event.attendee_limit && rsvps.length >= event.attendee_limit}
🚫

Event is Full!

Maximum capacity reached

{:else}
{ isAddingRSVP = true; clearMessages(); return async ({ result, update }) => { isAddingRSVP = false; if (result.type === 'failure') { error = result.data?.error || 'Failed to add RSVP'; } update(); }; }} class="space-y-4" >
{/if}

Attendees

{rsvps.length}
{#if rsvps.length === 0}

No attendees yet

Be the first to join!

{:else}
{#each rsvps as attendee, i (i)}
{attendee.name.charAt(0).toUpperCase()}

{attendee.name}

{(() => { const date = new Date(attendee.created_at); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}/${month}/${day} ${hours}:${minutes}`; })()}

{#if attendee.user_id === currentUserId}
{ clearMessages(); return async ({ result, update }) => { if (result.type === 'failure') { error = result.data?.error || 'Failed to remove RSVP'; } update(); }; }} style="display: inline;" >
{/if}
{/each}
{/if}
{/if}
{#if success} {#if form?.type === 'add'}
{success}
{:else if form?.type === 'remove'}
Removed RSVP successfully.
{/if} {/if} {#if error}
{error}
{/if}