filters added

This commit is contained in:
Benjamin Takats
2022-12-04 13:34:44 +01:00
parent a4734bcdc5
commit 7152446895
16 changed files with 901 additions and 83 deletions

View File

@@ -34,9 +34,12 @@ class Header extends Component
public function render()
{
return view('livewire.frontend.header', [
'cities' => City::query()
->select(['latitude', 'longitude'])
->get(),
'cities' => City::query()
->select(['latitude', 'longitude'])
->get(),
'countries' => Country::query()
->select(['code', 'name'])
->get(),
]);
}
}

View File

@@ -66,4 +66,17 @@ class CourseTable extends DataTableComponent
->whereHas('events.venue.city.country',
fn($query) => $query->where('countries.code', $this->country));
}
public function courseSearch($id)
{
return to_route('search.event', [
'#table',
'country' => $this->country,
'table' => [
'filters' => [
'course_id' => $id,
],
]
]);
}
}

View File

@@ -4,10 +4,12 @@ namespace App\Http\Livewire\Tables;
use App\Models\Category;
use App\Models\Event;
use App\Models\Lecturer;
use Illuminate\Database\Eloquent\Builder;
use Rappasoft\LaravelLivewireTables\DataTableComponent;
use Rappasoft\LaravelLivewireTables\Views\Column;
use Rappasoft\LaravelLivewireTables\Views\Filters\MultiSelectFilter;
use Rappasoft\LaravelLivewireTables\Views\Filters\SelectFilter;
use Rappasoft\LaravelLivewireTables\Views\Filters\TextFilter;
class EventTable extends DataTableComponent
@@ -54,15 +56,35 @@ class EventTable extends DataTableComponent
$builder
->whereHas('venue.city',
function ($query) use ($value) {
foreach (str($value)->explode(',') as $item) {
$query->orWhere('cities.name', 'ilike', "%$item%");
}
$query->whereIn('cities.name', str($value)->explode(','));
});
} else {
$builder->whereHas('venue.city',
fn($query) => $query->where('cities.name', 'ilike', "%$value%"));
}
}),
TextFilter::make('Veranstaltungs-Ort', 'venue')
->config([
'placeholder' => __('Suche Veranstaltungs-Ort'),
])
->filter(function (Builder $builder, string $value) {
$builder->whereHas('venue',
fn($query) => $query->where('venues.name', 'ilike', "%$value%"));
}),
TextFilter::make('Kurs')
->config([
'placeholder' => __('Suche Kurs'),
])
->filter(function (Builder $builder, string $value) {
$builder->whereHas('course',
fn($query) => $query->where('courses.name', 'ilike', "%$value%"));
}),
TextFilter::make('Kurs by ID', 'course_id')
->hiddenFromMenus()
->filter(function (Builder $builder, string $value) {
$builder->whereHas('course',
fn($query) => $query->where('courses.id', '=', $value));
}),
MultiSelectFilter::make('Art')
->options(
Category::query()
@@ -73,6 +95,16 @@ class EventTable extends DataTableComponent
$builder->whereHas('course.categories',
fn($query) => $query->whereIn('categories.id', $values));
}),
SelectFilter::make('Dozent')
->options(
Lecturer::query()
->pluck('name', 'id')
->toArray()
)
->filter(function (Builder $builder, string $value) {
$builder->whereHas('course.lecturer',
fn($query) => $query->where('lecturers.id', $value));
}),
];
}

View File

@@ -11,6 +11,7 @@ use Rappasoft\LaravelLivewireTables\Views\Columns\ImageColumn;
class LecturerTable extends DataTableComponent
{
public string $country;
protected $model = Lecturer::class;
public function configure(): void
@@ -66,4 +67,19 @@ class LecturerTable extends DataTableComponent
'courses',
]);
}
public function lecturerSearch($id)
{
$lecturer = Lecturer::query()->find($id);
return to_route('search.event', [
'#table',
'country' => $this->country,
'table' => [
'filters' => [
'dozent' => $lecturer->id,
],
]
]);
}
}

View File

@@ -67,4 +67,19 @@ class VenueTable extends DataTableComponent
])
->whereHas('city.country', fn($query) => $query->where('code', $this->country));
}
public function venueSearch($id)
{
$venue = Venue::query()->find($id);
return to_route('search.event', [
'#table',
'country' => $this->country,
'table' => [
'filters' => [
'venue' => $venue->name,
],
]
]);
}
}