From 7b8d32807c2e27a875ef216b5fca89086bb5d9ac Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Sun, 7 Jan 2024 10:31:39 +0100 Subject: [PATCH] closes #21 feat: add calendar stream URL to meetups This commit adds a calendar stream URL to each meetup. The URL is copied to the clipboard when the user clicks on a new button added to the UI. The copied URL can be pasted into a compatible calendar app, allowing the user to easily add the meetup to their calendar. This feature was added to several views including 'profile/meetups', 'meetup/landing-page', and 'meetup/landing-page-event'. The associated controller 'DownloadMeetupCalendar' and livewire components were also updated accordingly. --- .../Controllers/DownloadMeetupCalendar.php | 2 +- app/Http/Livewire/Meetup/LandingPage.php | 52 ++++++++++--------- app/Http/Livewire/Profile/Meetups.php | 44 +++++++++------- .../meetup/landing-page-event.blade.php | 21 ++++++++ .../livewire/meetup/landing-page.blade.php | 28 +++++++--- .../views/livewire/profile/meetups.blade.php | 36 +++++++++++-- 6 files changed, 127 insertions(+), 56 deletions(-) diff --git a/app/Http/Controllers/DownloadMeetupCalendar.php b/app/Http/Controllers/DownloadMeetupCalendar.php index 45003792..c996d3a4 100644 --- a/app/Http/Controllers/DownloadMeetupCalendar.php +++ b/app/Http/Controllers/DownloadMeetupCalendar.php @@ -19,7 +19,7 @@ class DownloadMeetupCalendar extends Controller if ($request->has('meetup')) { $meetup = Meetup::query() ->with([ - 'meetupEvents', + 'meetupEvents.meetup', ]) ->findOrFail($request->input('meetup')); $events = $meetup->meetupEvents; diff --git a/app/Http/Livewire/Meetup/LandingPage.php b/app/Http/Livewire/Meetup/LandingPage.php index 1377b63c..7f0a3252 100644 --- a/app/Http/Livewire/Meetup/LandingPage.php +++ b/app/Http/Livewire/Meetup/LandingPage.php @@ -20,37 +20,41 @@ class LandingPage extends Component public function mount() { - $this->meetup->load([ - 'media', - ]); + $this->meetup + ->loadCount([ + 'meetupEvents' + ]) + ->load([ + 'media', + ]); } public function render() { return view('livewire.meetup.landing-page', [ 'meetupEvents' => MeetupEvent::query() - ->with([ - 'meetup.city.country', - ]) - ->where('meetup_events.meetup_id', $this->meetup->id) - ->where('meetup_events.start', '>=', now()->subDay()) - ->orderBy('start') - ->get(), + ->with([ + 'meetup.city.country', + ]) + ->where('meetup_events.meetup_id', $this->meetup->id) + ->where('meetup_events.start', '>=', now()->subDay()) + ->orderBy('start') + ->get(), 'events' => MeetupEvent::query() - ->with([ - 'meetup.city.country', - ]) - ->where('meetup_events.meetup_id', $this->meetup->id) - ->where('meetup_events.start', '>=', now()->subDay()) - ->orderBy('start') - ->get() - ->map(fn ($event) => [ - 'id' => $event->id, - 'startDate' => $event->start, - 'endDate' => $event->start->addHours(1), - 'location' => $event->location, - 'description' => $event->description, - ]), + ->with([ + 'meetup.city.country', + ]) + ->where('meetup_events.meetup_id', $this->meetup->id) + ->where('meetup_events.start', '>=', now()->subDay()) + ->orderBy('start') + ->get() + ->map(fn($event) => [ + 'id' => $event->id, + 'startDate' => $event->start, + 'endDate' => $event->start->addHours(1), + 'location' => $event->location, + 'description' => $event->description, + ]), ]) ->layout('layouts.guest', [ 'SEOData' => new SEOData( diff --git a/app/Http/Livewire/Profile/Meetups.php b/app/Http/Livewire/Profile/Meetups.php index 9ccf4456..428c0047 100644 --- a/app/Http/Livewire/Profile/Meetups.php +++ b/app/Http/Livewire/Profile/Meetups.php @@ -38,13 +38,13 @@ class Meetups extends Component } $this->meetups = Meetup::query() - ->with([ - 'city', - ]) - ->where('name', 'ilike', '%'.$this->search.'%') - ->orderBy('name') - ->limit(10) - ->get(); + ->with([ + 'city', + ]) + ->where('name', 'ilike', '%' . $this->search . '%') + ->orderBy('name') + ->limit(10) + ->get(); $this->myMeetups = auth() ->user() ->meetups() @@ -64,7 +64,11 @@ class Meetups extends Component 'link' => route('meetup.landing', [ 'country' => $meetup->city->country->code, 'meetup' => $meetup, - ]) + ]), + 'ics' => route('meetup.ics', [ + 'country' => $meetup->city->country->code, + 'meetup' => $meetup, + ]), ]) ->toArray(); if (count($this->myMeetups) > 0) { @@ -83,20 +87,20 @@ class Meetups extends Component public function updatedSearch($value) { $this->meetups = Meetup::query() - ->with([ - 'city', - ]) - ->where('name', 'ilike', '%'.$value.'%') - ->orderBy('name') - ->limit(10) - ->get(); + ->with([ + 'city', + ]) + ->where('name', 'ilike', '%' . $value . '%') + ->orderBy('name') + ->limit(10) + ->get(); } public function signUpForMeetup($id) { $user = auth()->user(); $user->meetups() - ->toggle($id); + ->toggle($id); $this->myMeetups = auth() ->user() ->meetups() @@ -121,11 +125,15 @@ class Meetups extends Component 'link' => route('meetup.landing', [ 'country' => $meetup->city->country->code, 'meetup' => $meetup, - ]) + ]), + 'ics' => route('meetup.ics', [ + 'country' => $meetup->city->country->code, + 'meetup' => $meetup, + ]), ]) ->toArray(); $this->notification() - ->success(__('Saved.')); + ->success(__('Saved.')); } public function render() diff --git a/resources/views/livewire/meetup/landing-page-event.blade.php b/resources/views/livewire/meetup/landing-page-event.blade.php index 11bf7108..143621f3 100644 --- a/resources/views/livewire/meetup/landing-page-event.blade.php +++ b/resources/views/livewire/meetup/landing-page-event.blade.php @@ -269,6 +269,27 @@ @endauth + +
+ + + {{ __('Calendar Stream-Url') }} {{ $meetup->name }} + + @if(auth()->check() && auth()->user()->meetups->count() > 0) + + + {{ __('Calendar Stream-Url for my meetups only') }} + + @endif +
diff --git a/resources/views/livewire/meetup/landing-page.blade.php b/resources/views/livewire/meetup/landing-page.blade.php index 2bfa3a97..644122be 100644 --- a/resources/views/livewire/meetup/landing-page.blade.php +++ b/resources/views/livewire/meetup/landing-page.blade.php @@ -73,11 +73,20 @@
-
-
-

- {{ __('Events') }} -

+
+
+
+
{{ __('Events') }}
+
+ + + {{ __('Calendar Stream-Url') }} + +
+
@@ -86,7 +95,8 @@ @php $activeClass = $activeEvent === $meetupEvent->id ? 'bg-gradient-to-r from-amber-800 via-amber-600 to-amber-500' : 'bg-amber-500'; @endphp -
  • +
  • {{--
    -
    {!! nl2br($meetupEvent->description) !!}
    +
    {!! nl2br($meetupEvent->description) !!}
  • @@ -126,7 +137,8 @@
    @@ -24,11 +37,24 @@

    @foreach($myMeetupNames as $myMeetup) - - - +
    +
    + + + +
    +
    + + + {{ __('Calendar') }} + +
    +
    @endforeach