feat: Enhance Filament Widgets
This commit is contained in:
@@ -4,8 +4,8 @@ namespace App\Filament\Widgets;
|
|||||||
|
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Widgets\TableWidget as BaseWidget;
|
use Filament\Widgets\TableWidget as BaseWidget;
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
use App\Models\Event;
|
||||||
|
|
||||||
class EventsActiveToday extends BaseWidget
|
class EventsActiveToday extends BaseWidget
|
||||||
{
|
{
|
||||||
@@ -15,20 +15,19 @@ class EventsActiveToday extends BaseWidget
|
|||||||
public function table(Tables\Table $table): Tables\Table
|
public function table(Tables\Table $table): Tables\Table
|
||||||
{
|
{
|
||||||
$today = Carbon::today()->toDateString();
|
$today = Carbon::today()->toDateString();
|
||||||
$query = DB::table('events as e')
|
|
||||||
->leftJoin('photos as p', function ($join) use ($today) {
|
|
||||||
$join->on('p.event_id', '=', 'e.id')
|
|
||||||
->whereRaw("date(p.created_at) = ?", [$today]);
|
|
||||||
})
|
|
||||||
->where('e.is_active', 1)
|
|
||||||
->whereDate('e.date', '<=', $today)
|
|
||||||
->selectRaw('e.id, e.slug, e.name, e.date, COUNT(p.id) as uploads_today')
|
|
||||||
->groupBy('e.id', 'e.slug', 'e.name', 'e.date')
|
|
||||||
->orderBy('e.date', 'desc')
|
|
||||||
->limit(10);
|
|
||||||
|
|
||||||
return $table
|
return $table
|
||||||
->query($query)
|
->query(
|
||||||
|
Event::query()
|
||||||
|
->where('is_active', true)
|
||||||
|
->whereDate('date', '<=', $today)
|
||||||
|
->withCount([
|
||||||
|
'photos as uploads_today' => function ($q) use ($today) {
|
||||||
|
$q->whereDate('created_at', $today);
|
||||||
|
},
|
||||||
|
])
|
||||||
|
->orderByDesc('date')
|
||||||
|
->limit(10)
|
||||||
|
)
|
||||||
->columns([
|
->columns([
|
||||||
Tables\Columns\TextColumn::make('id')->label('#')->width('60px'),
|
Tables\Columns\TextColumn::make('id')->label('#')->width('60px'),
|
||||||
Tables\Columns\TextColumn::make('slug')->label('Slug')->searchable(),
|
Tables\Columns\TextColumn::make('slug')->label('Slug')->searchable(),
|
||||||
|
|||||||
@@ -4,7 +4,8 @@ namespace App\Filament\Widgets;
|
|||||||
|
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Widgets\TableWidget as BaseWidget;
|
use Filament\Widgets\TableWidget as BaseWidget;
|
||||||
use Illuminate\Support\Facades\DB;
|
use App\Models\Photo;
|
||||||
|
use Filament\Actions;
|
||||||
|
|
||||||
class RecentPhotosTable extends BaseWidget
|
class RecentPhotosTable extends BaseWidget
|
||||||
{
|
{
|
||||||
@@ -13,10 +14,12 @@ class RecentPhotosTable extends BaseWidget
|
|||||||
|
|
||||||
public function table(Tables\Table $table): Tables\Table
|
public function table(Tables\Table $table): Tables\Table
|
||||||
{
|
{
|
||||||
$query = DB::table('photos')->orderByDesc('created_at')->limit(10);
|
|
||||||
|
|
||||||
return $table
|
return $table
|
||||||
->query($query)
|
->query(
|
||||||
|
Photo::query()
|
||||||
|
->orderByDesc('created_at')
|
||||||
|
->limit(10)
|
||||||
|
)
|
||||||
->columns([
|
->columns([
|
||||||
Tables\Columns\ImageColumn::make('thumbnail_path')->label('Thumb')->circular(),
|
Tables\Columns\ImageColumn::make('thumbnail_path')->label('Thumb')->circular(),
|
||||||
Tables\Columns\TextColumn::make('id')->label('#'),
|
Tables\Columns\TextColumn::make('id')->label('#'),
|
||||||
@@ -25,14 +28,14 @@ class RecentPhotosTable extends BaseWidget
|
|||||||
Tables\Columns\TextColumn::make('created_at')->since(),
|
Tables\Columns\TextColumn::make('created_at')->since(),
|
||||||
])
|
])
|
||||||
->actions([
|
->actions([
|
||||||
Tables\Actions\Action::make('feature')
|
Actions\Action::make('feature')
|
||||||
->label('Feature')
|
->label('Feature')
|
||||||
->visible(fn($record) => ! (bool)($record->is_featured ?? 0))
|
->visible(fn(Photo $record) => ! (bool)($record->is_featured ?? 0))
|
||||||
->action(fn($record) => DB::table('photos')->where('id', $record->id)->update(['is_featured' => 1, 'updated_at' => now()])),
|
->action(fn(Photo $record) => $record->update(['is_featured' => 1])),
|
||||||
Tables\Actions\Action::make('unfeature')
|
Actions\Action::make('unfeature')
|
||||||
->label('Unfeature')
|
->label('Unfeature')
|
||||||
->visible(fn($record) => (bool)($record->is_featured ?? 0))
|
->visible(fn(Photo $record) => (bool)($record->is_featured ?? 0))
|
||||||
->action(fn($record) => DB::table('photos')->where('id', $record->id)->update(['is_featured' => 0, 'updated_at' => now()])),
|
->action(fn(Photo $record) => $record->update(['is_featured' => 0])),
|
||||||
])
|
])
|
||||||
->paginated(false);
|
->paginated(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ namespace App\Filament\Widgets;
|
|||||||
|
|
||||||
use Filament\Tables;
|
use Filament\Tables;
|
||||||
use Filament\Widgets\TableWidget as BaseWidget;
|
use Filament\Widgets\TableWidget as BaseWidget;
|
||||||
use Illuminate\Support\Facades\DB;
|
use App\Models\Tenant;
|
||||||
|
|
||||||
class TopTenantsByUploads extends BaseWidget
|
class TopTenantsByUploads extends BaseWidget
|
||||||
{
|
{
|
||||||
@@ -13,20 +13,17 @@ class TopTenantsByUploads extends BaseWidget
|
|||||||
|
|
||||||
public function table(Tables\Table $table): Tables\Table
|
public function table(Tables\Table $table): Tables\Table
|
||||||
{
|
{
|
||||||
$query = DB::table('photos as p')
|
|
||||||
->join('events as e', 'e.id', '=', 'p.event_id')
|
|
||||||
->join('tenants as t', 't.id', '=', 'e.tenant_id')
|
|
||||||
->selectRaw('t.id as tenant_id, t.name as tenant_name, COUNT(p.id) as uploads')
|
|
||||||
->groupBy('t.id', 't.name')
|
|
||||||
->orderByDesc('uploads')
|
|
||||||
->limit(5);
|
|
||||||
|
|
||||||
return $table
|
return $table
|
||||||
->query($query)
|
->query(
|
||||||
|
Tenant::query()
|
||||||
|
->withCount('photos')
|
||||||
|
->orderByDesc('photos_count')
|
||||||
|
->limit(5)
|
||||||
|
)
|
||||||
->columns([
|
->columns([
|
||||||
Tables\Columns\TextColumn::make('tenant_id')->label('#')->width('60px'),
|
Tables\Columns\TextColumn::make('id')->label('#')->width('60px'),
|
||||||
Tables\Columns\TextColumn::make('tenant_name')->label('Tenant')->searchable(),
|
Tables\Columns\TextColumn::make('name')->label('Tenant')->searchable(),
|
||||||
Tables\Columns\TextColumn::make('uploads')->label('Uploads')->numeric(),
|
Tables\Columns\TextColumn::make('photos_count')->label('Uploads')->numeric(),
|
||||||
])
|
])
|
||||||
->paginated(false);
|
->paginated(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user