From 1adf1e366a3a0276d9a3a231ee948366948bc26b Mon Sep 17 00:00:00 2001 From: Benjamin Takats Date: Fri, 16 Dec 2022 12:57:59 +0100 Subject: [PATCH] course_events with calendar --- app/Http/Livewire/School/EventTable.php | 67 ++++++++++- app/Http/Livewire/Tables/EventTable.php | 5 + .../livewire/school/event-table.blade.php | 111 ++++++++++++++++++ 3 files changed, 182 insertions(+), 1 deletion(-) diff --git a/app/Http/Livewire/School/EventTable.php b/app/Http/Livewire/School/EventTable.php index 7c4afbba..32cfa959 100644 --- a/app/Http/Livewire/School/EventTable.php +++ b/app/Http/Livewire/School/EventTable.php @@ -3,14 +3,79 @@ namespace App\Http\Livewire\School; use App\Models\Country; +use App\Models\CourseEvent; use Livewire\Component; class EventTable extends Component { public Country $country; + public ?int $year = null; + + protected $queryString = ['year']; + + public function mount() + { + if (!$this->year) { + $this->year = now()->year; + } + } + public function render() { - return view('livewire.school.event-table'); + return view('livewire.school.event-table', [ + 'markers' => CourseEvent::query() + ->with([ + 'course', + 'venue.city.country', + ]) + ->where(fn($query) => $query + ->whereHas('venue.city.country', + fn($query) => $query->where('countries.code', $this->country->code)) + ) + ->get() + ->map(fn($event) => [ + 'id' => $event->id, + 'name' => $event->course->name, + 'coords' => [$event->venue->city->latitude, $event->venue->city->longitude], + ]), + 'events' => CourseEvent::query() + ->get() + ->map(fn($event) => [ + 'id' => $event->id, + 'startDate' => $event->from, + 'endDate' => $event->to, + 'location' => $event->course->name, + 'description' => $event->venue->name, + ]), + ]); + } + + public function filterByMarker($id) + { + return to_route('school.table.event', [ + '#table', + 'country' => $this->country->code, + 'year' => $this->year, + 'table' => [ + 'filters' => [ + 'byid' => $id, + ], + ] + ]); + } + + public function popover($content, $ids) + { + return to_route('school.table.event', [ + '#table', + 'country' => $this->country->code, + 'year' => $this->year, + 'table' => [ + 'filters' => [ + 'byid' => $ids, + ] + ] + ]); } } diff --git a/app/Http/Livewire/Tables/EventTable.php b/app/Http/Livewire/Tables/EventTable.php index 3938156f..685f9847 100644 --- a/app/Http/Livewire/Tables/EventTable.php +++ b/app/Http/Livewire/Tables/EventTable.php @@ -47,6 +47,11 @@ class EventTable extends DataTableComponent public function filters(): array { return [ + TextFilter::make('Event by ID', 'byid') + ->hiddenFromMenus() + ->filter(function (Builder $builder, string $value) { + $builder->whereIn('course_events.id', str($value)->explode(',')); + }), TextFilter::make('Stadt') ->config([ 'placeholder' => __('Suche Stadt'), diff --git a/resources/views/livewire/school/event-table.blade.php b/resources/views/livewire/school/event-table.blade.php index cc77a5d8..73f7bc55 100644 --- a/resources/views/livewire/school/event-table.blade.php +++ b/resources/views/livewire/school/event-table.blade.php @@ -4,6 +4,117 @@ {{-- MAIN --}}
+
+
+ + + + + + + +
+
+
+
+
+
+
+
+
+
+