diff --git a/app/Http/Livewire/Tables/BitcoinEventTable.php b/app/Http/Livewire/Tables/BitcoinEventTable.php index 30e33461..ab27d100 100644 --- a/app/Http/Livewire/Tables/BitcoinEventTable.php +++ b/app/Http/Livewire/Tables/BitcoinEventTable.php @@ -35,10 +35,24 @@ class BitcoinEventTable extends DataTableComponent public function columns(): array { return [ - Column::make(__('Venue'), 'venue.name'), Column::make(__('Title'), 'title') + ->format( + fn($value, $row, Column $column) => view('columns.bitcoin_events.title')->withRow($row) + ) ->sortable(), + Column::make(__('From'), 'from') + ->format( + fn($value, $row, Column $column) => $value->asDateTime() + ), + Column::make(__('To'), 'to') + ->format( + fn($value, $row, Column $column) => $value->asDateTime() + ), + Column::make(__('Venue'), 'venue.name'), Column::make(__('Link'), 'link') + ->format( + fn($value, $row, Column $column) => view('columns.bitcoin_events.link')->withRow($row) + ) ->sortable(), ]; } diff --git a/app/Http/Livewire/Tables/MeetupEventTable.php b/app/Http/Livewire/Tables/MeetupEventTable.php index 972faee0..0e74d6b3 100644 --- a/app/Http/Livewire/Tables/MeetupEventTable.php +++ b/app/Http/Livewire/Tables/MeetupEventTable.php @@ -2,9 +2,11 @@ namespace App\Http\Livewire\Tables; +use App\Models\MeetupEvent; +use Illuminate\Database\Eloquent\Builder; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; -use App\Models\MeetupEvent; +use Rappasoft\LaravelLivewireTables\Views\Filters\TextFilter; class MeetupEventTable extends DataTableComponent { @@ -15,6 +17,7 @@ class MeetupEventTable extends DataTableComponent public function configure(): void { $this->setPrimaryKey('id') + ->setAdditionalSelects(['meetup_events.meetup_id']) ->setThAttributes(function (Column $column) { return [ 'class' => 'px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider dark:bg-gray-800 dark:text-gray-400', @@ -31,19 +34,45 @@ class MeetupEventTable extends DataTableComponent ->setPerPage(50); } + public function filters(): array + { + return [ + TextFilter::make('Meetup-Event by ID', 'id') + ->hiddenFromMenus() + ->filter(function (Builder $builder, string $value) { + $builder->whereIn('meetup_events.id', str($value)->explode(',')); + }), + ]; + } + public function columns(): array { return [ + Column::make(__('Meetup'), 'meetup.name') + ->format( + fn($value, $row, Column $column) => view('columns.meetup_events.name')->withRow($row) + ) + ->sortable(), Column::make(__('Location'), 'location') - ->sortable(), + ->sortable(), Column::make(__('Start'), 'start') - ->sortable(), + ->format( + fn($value, $row, Column $column) => $value->asDateTime() + ) + ->sortable(), Column::make(__('Link'), 'link') - ->sortable(), - Column::make("Created at", "created_at") - ->sortable(), - Column::make("Updated at", "updated_at") - ->sortable(), + ->format( + fn($value, $row, Column $column) => view('columns.meetup_events.link')->withRow($row) + ) + ->sortable(), ]; } + + public function builder(): Builder + { + return MeetupEvent::query() + ->with([ + 'meetup', + ]); + } } diff --git a/app/Http/Livewire/Tables/MeetupTable.php b/app/Http/Livewire/Tables/MeetupTable.php index 9a1bff14..64afc640 100644 --- a/app/Http/Livewire/Tables/MeetupTable.php +++ b/app/Http/Livewire/Tables/MeetupTable.php @@ -3,6 +3,7 @@ namespace App\Http\Livewire\Tables; use App\Models\Meetup; +use Illuminate\Database\Eloquent\Builder; use Rappasoft\LaravelLivewireTables\DataTableComponent; use Rappasoft\LaravelLivewireTables\Views\Column; @@ -35,9 +36,37 @@ class MeetupTable extends DataTableComponent { return [ Column::make(__('Name'), 'name') + ->format( + fn($value, $row, Column $column) => view('columns.meetups.name')->withRow($row) + ) ->sortable(), Column::make(__('Link'), 'link') + ->format( + fn($value, $row, Column $column) => view('columns.meetups.link')->withRow($row) + ) ->sortable(), + Column::make(__('Actions'),) + ->label( + fn($row, Column $column) => view('columns.meetups.action')->withRow($row) + ), ]; } + + public function builder(): Builder + { + return Meetup::query() + ->withCount([ + 'meetupEvents', + ]); + } + + public function meetupEventSearch($id) + { + return to_route('meetup.table.meetupEvent', [ + 'country' => $this->country, + 'table' => [ + 'filters' => ['id' => $id], + ] + ]); + } } diff --git a/app/Models/BitcoinEvent.php b/app/Models/BitcoinEvent.php index 4a092d31..eaa4c244 100644 --- a/app/Models/BitcoinEvent.php +++ b/app/Models/BitcoinEvent.php @@ -4,10 +4,15 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Spatie\Image\Manipulations; +use Spatie\MediaLibrary\HasMedia; +use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; -class BitcoinEvent extends Model +class BitcoinEvent extends Model implements HasMedia { use HasFactory; + use InteractsWithMedia; /** * The attributes that aren't mass assignable. @@ -28,6 +33,24 @@ class BitcoinEvent extends Model 'to' => 'datetime', ]; + public function registerMediaConversions(Media $media = null): void + { + $this + ->addMediaConversion('preview') + ->fit(Manipulations::FIT_CROP, 300, 300) + ->nonQueued(); + $this->addMediaConversion('thumb') + ->fit(Manipulations::FIT_CROP, 130, 130) + ->width(130) + ->height(130); + } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('logo') + ->useFallbackUrl(asset('img/einundzwanzig-cover-lesestunde.png')); + } + public function venue(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Venue::class); diff --git a/app/Models/Meetup.php b/app/Models/Meetup.php index 758d464a..5ab46043 100644 --- a/app/Models/Meetup.php +++ b/app/Models/Meetup.php @@ -4,30 +4,57 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; +use Spatie\Image\Manipulations; +use Spatie\MediaLibrary\HasMedia; +use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; -class Meetup extends Model +class Meetup extends Model implements HasMedia { use HasFactory; + use InteractsWithMedia; /** * The attributes that aren't mass assignable. - * * @var array */ protected $guarded = []; /** * The attributes that should be cast to native types. - * * @var array */ protected $casts = [ - 'id' => 'integer', + 'id' => 'integer', 'city_id' => 'integer', ]; + public function registerMediaConversions(Media $media = null): void + { + $this + ->addMediaConversion('preview') + ->fit(Manipulations::FIT_CROP, 300, 300) + ->nonQueued(); + $this->addMediaConversion('thumb') + ->fit(Manipulations::FIT_CROP, 130, 130) + ->width(130) + ->height(130); + } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('logo') + ->useFallbackUrl(asset('img/einundzwanzig-cover-lesestunde.png')); + } + public function city(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(City::class); } + + public function meetupEvents(): HasMany + { + return $this->hasMany(MeetupEvent::class); + } } diff --git a/app/Nova/BitcoinEvent.php b/app/Nova/BitcoinEvent.php index 49abafc2..40cf314d 100644 --- a/app/Nova/BitcoinEvent.php +++ b/app/Nova/BitcoinEvent.php @@ -2,6 +2,7 @@ namespace App\Nova; +use Ebess\AdvancedNovaMediaLibrary\Fields\Images; use Laravel\Nova\Fields\ID; use Illuminate\Http\Request; use Laravel\Nova\Fields\Text; @@ -45,6 +46,9 @@ class BitcoinEvent extends Resource return [ ID::make()->sortable(), + Images::make(__('Logo'), 'logo') + ->conversionOnIndexView('thumb'), + DateTime::make('From') ->rules('required'), diff --git a/app/Nova/Meetup.php b/app/Nova/Meetup.php index 59d749db..16404f14 100644 --- a/app/Nova/Meetup.php +++ b/app/Nova/Meetup.php @@ -2,6 +2,7 @@ namespace App\Nova; +use Ebess\AdvancedNovaMediaLibrary\Fields\Images; use Laravel\Nova\Fields\ID; use Illuminate\Http\Request; use Laravel\Nova\Fields\Text; @@ -44,6 +45,9 @@ class Meetup extends Resource return [ ID::make()->sortable(), + Images::make(__('Logo'), 'logo') + ->conversionOnIndexView('thumb'), + Text::make('Name') ->rules('required', 'string', 'unique:meetups,name'), diff --git a/resources/views/columns/bitcoin_events/link.blade.php b/resources/views/columns/bitcoin_events/link.blade.php new file mode 100644 index 00000000..30634fd7 --- /dev/null +++ b/resources/views/columns/bitcoin_events/link.blade.php @@ -0,0 +1,5 @@ +
+ + {{ $row->link }} + +
diff --git a/resources/views/columns/bitcoin_events/title.blade.php b/resources/views/columns/bitcoin_events/title.blade.php new file mode 100644 index 00000000..8f371873 --- /dev/null +++ b/resources/views/columns/bitcoin_events/title.blade.php @@ -0,0 +1,6 @@ +
+ {{ $row->title }} +
+ {{ $row->title }} +
+
diff --git a/resources/views/columns/meetup_events/link.blade.php b/resources/views/columns/meetup_events/link.blade.php new file mode 100644 index 00000000..30634fd7 --- /dev/null +++ b/resources/views/columns/meetup_events/link.blade.php @@ -0,0 +1,5 @@ +
+ + {{ $row->link }} + +
diff --git a/resources/views/columns/meetup_events/name.blade.php b/resources/views/columns/meetup_events/name.blade.php new file mode 100644 index 00000000..c760a74c --- /dev/null +++ b/resources/views/columns/meetup_events/name.blade.php @@ -0,0 +1,6 @@ +
+ {{ $row->meetup->name }} +
+ {{ $row->meetup->name }} +
+
diff --git a/resources/views/columns/meetups/action.blade.php b/resources/views/columns/meetups/action.blade.php new file mode 100644 index 00000000..6f82e672 --- /dev/null +++ b/resources/views/columns/meetups/action.blade.php @@ -0,0 +1 @@ +Termine anzeigen ({{ $row->meetup_events_count }}) diff --git a/resources/views/columns/meetups/link.blade.php b/resources/views/columns/meetups/link.blade.php new file mode 100644 index 00000000..30634fd7 --- /dev/null +++ b/resources/views/columns/meetups/link.blade.php @@ -0,0 +1,5 @@ +
+ + {{ $row->link }} + +
diff --git a/resources/views/columns/meetups/name.blade.php b/resources/views/columns/meetups/name.blade.php new file mode 100644 index 00000000..ad360d4b --- /dev/null +++ b/resources/views/columns/meetups/name.blade.php @@ -0,0 +1,6 @@ +
+ {{ $row->name }} +
+ {{ $row->name }} +
+
diff --git a/resources/views/livewire/frontend/welcome.blade.php b/resources/views/livewire/frontend/welcome.blade.php index b08ac49a..a213af3c 100644 --- a/resources/views/livewire/frontend/welcome.blade.php +++ b/resources/views/livewire/frontend/welcome.blade.php @@ -1,5 +1,5 @@
-
+
Get together + class="px-2 py-1 mb-3 text-xs font-semibold tracking-tight text-white uppercase bg-amber-500 rounded-md">Plebs together strong

Meetups