Files
ladill-meet/resources/views/meet/webinars/show.blade.php
T
isaaccladandCursor 5c1affcca5
Deploy Ladill Meet / deploy (push) Successful in 46s
Bill all meet sessions per participant instead of per hour.
Meetings and webinars now share GHS 0.30 per peak participant, with usage UI and plan quotas updated to match.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 18:28:35 +00:00

122 lines
6.8 KiB
PHP

<x-app-layout title="{{ $room->title }}">
<div class="mx-auto max-w-2xl">
<div class="flex items-start justify-between gap-4">
<div>
<p class="text-xs font-semibold uppercase tracking-wide text-indigo-600">Webinar</p>
<h1 class="text-2xl font-semibold text-slate-900">{{ $room->title }}</h1>
<p class="mt-1 text-sm text-slate-500">{{ config('meet.room_statuses')[$room->status] ?? $room->status }}</p>
</div>
@if ($room->canRestart())
<form method="POST" action="{{ route('meet.webinars.start', $room) }}">
@csrf
<button type="submit" class="btn-primary">{{ $room->restartLabel() }}</button>
</form>
@endif
</div>
@if ($errors->any())
<div class="mt-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700">
{{ $errors->first() }}
</div>
@endif
<div class="mt-4 rounded-xl border border-indigo-100 bg-indigo-50 px-4 py-3 text-sm text-indigo-900">
Billed at <span class="font-medium">GHS {{ number_format(config('meet.billing.price_per_participant_ghs', 0.30), 2) }} per participant</span> (peak attendance when the session ends).
</div>
<div class="mt-6 rounded-2xl border border-slate-200 bg-white p-6">
<h2 class="text-sm font-medium text-slate-700">Registration link</h2>
<div class="mt-2 flex gap-2">
<input type="text" readonly value="{{ route('meet.webinar.register', $room) }}" class="flex-1 rounded-lg border-slate-300 bg-slate-50 text-sm font-mono">
<x-copy-button :text="route('meet.webinar.register', $room)" class="btn-secondary btn-secondary-sm shrink-0" />
</div>
<h2 class="mt-6 text-sm font-medium text-slate-700">Join link (hosts & panelists)</h2>
<div class="mt-2 flex gap-2">
<input type="text" readonly value="{{ $room->joinUrl() }}" class="flex-1 rounded-lg border-slate-300 bg-slate-50 text-sm font-mono">
<x-copy-button :text="$room->joinUrl()" class="btn-secondary btn-secondary-sm shrink-0" />
</div>
<div class="btn-group mt-4">
<a href="{{ route('meet.rooms.ical', $room) }}" class="btn-secondary btn-secondary-sm">Download iCal</a>
<a href="{{ route('meet.rooms.qr', $room) }}" target="_blank" class="btn-secondary btn-secondary-sm">QR code</a>
@if ($room->sessions->isNotEmpty())
<a href="{{ route('meet.rooms.attendance', $room) }}" class="btn-secondary btn-secondary-sm">Attendance CSV</a>
@endif
<a href="{{ route('meet.invitations.index', $room) }}" class="btn-secondary btn-secondary-sm">Manage invitations</a>
@if ($room->canRestart() && ($room->status === 'ended' || $room->sessions->isNotEmpty()))
<form method="POST" action="{{ route('meet.webinars.start', $room) }}" class="inline">
@csrf
<button type="submit" class="btn-secondary btn-secondary-sm">{{ $room->restartLabel() }}</button>
</form>
@endif
<a href="{{ route('meet.webinar.registrations', $room) }}" class="btn-secondary btn-secondary-sm">Registrations</a>
<a href="{{ route('meet.webinar.register', $room) }}" target="_blank" class="btn-secondary btn-secondary-sm">Registration page</a>
</div>
@if ($room->passcode)
<p class="mt-3 text-sm text-slate-600">Passcode: <span class="font-mono font-medium">{{ $room->passcode }}</span></p>
@endif
@if ($room->scheduled_at)
<p class="mt-3 text-sm text-slate-600">
Scheduled: {{ $room->scheduled_at->timezone($room->timezone)->format('M j, Y g:i A T') }}
</p>
@endif
</div>
@php
$recordings = $room->sessions->flatMap->recordings->sortByDesc('created_at');
$summaries = $room->sessions->flatMap->aiSummaries->where('status', 'ready')->sortByDesc('created_at');
@endphp
@if ($recordings->isNotEmpty())
<div class="mt-6 rounded-2xl border border-slate-200 bg-white p-6">
<h2 class="text-sm font-medium text-slate-700">Recordings</h2>
<ul class="mt-3 divide-y divide-slate-100 text-sm">
@foreach ($recordings as $recording)
<li class="flex items-center justify-between py-2">
<span>{{ $recording->created_at->format('M j, Y g:i A') }}</span>
<a href="{{ route('meet.recordings.show', $recording) }}" class="text-indigo-600 hover:underline">{{ config('meet.recording_statuses')[$recording->status] ?? $recording->status }}</a>
</li>
@endforeach
</ul>
</div>
@endif
@if ($summaries->isNotEmpty())
<div class="mt-6 rounded-2xl border border-slate-200 bg-white p-6">
<h2 class="text-sm font-medium text-slate-700">AI summaries</h2>
<ul class="mt-3 divide-y divide-slate-100 text-sm">
@foreach ($summaries as $summary)
<li class="py-2">
<a href="{{ route('meet.summaries.show', $summary) }}" class="text-indigo-600 hover:underline">Summary · {{ $summary->created_at->format('M j, Y') }}</a>
</li>
@endforeach
</ul>
</div>
@endif
@if ($room->sessions->isNotEmpty())
<div class="mt-6 rounded-2xl border border-slate-200 bg-white p-6">
<h2 class="text-sm font-medium text-slate-700">Sessions</h2>
<ul class="mt-3 divide-y divide-slate-100 text-sm">
@foreach ($room->sessions as $session)
<li class="flex items-center justify-between py-2">
<span>{{ $session->started_at?->format('M j, Y g:i A') ?? 'Pending' }}</span>
<span class="text-slate-500">{{ $session->peak_participants }} participants · {{ config('meet.session_statuses')[$session->status] ?? $session->status }}</span>
</li>
@endforeach
</ul>
</div>
@endif
@if ($room->status === 'scheduled')
<form method="POST" action="{{ route('meet.rooms.cancel', $room) }}" class="mt-6" onsubmit="return confirm('Cancel this webinar?')">
@csrf
<button type="submit" class="text-sm text-red-600 hover:underline">Cancel webinar</button>
</form>
@endif
</div>
</x-app-layout>