Skip to content

Commit 32a425b

Browse files
committed
wip
1 parent 6a57192 commit 32a425b

58 files changed

Lines changed: 1768 additions & 665 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/Concerns/TabbedLayout.php

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Filament\Resources\Pages\EditRecord;
1010
use Filament\Resources\Pages\ListRecords;
1111
use Filament\Resources\Pages\ViewRecord;
12-
use Illuminate\Support\Str;
1312

1413
trait TabbedLayout
1514
{
@@ -19,15 +18,12 @@ public function bootedTabbedLayout(): void
1918
return;
2019
}
2120

22-
if (! Str::startsWith(static::$view, 'filament-panels::resources.pages')) {
23-
return;
24-
}
25-
26-
static::$view = match (true) {
21+
$this->view = match (true) {
2722
$this instanceof ListRecords => 'filament.tabs.list-records',
2823
$this instanceof CreateRecord => 'filament.tabs.create-record',
2924
$this instanceof ViewRecord => 'filament.tabs.view-record',
3025
$this instanceof EditRecord => 'filament.tabs.edit-record',
26+
default => $this->view,
3127
};
3228
}
3329
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\MediaLibrary;
6+
7+
use Spatie\MediaLibrary\Support\UrlGenerator\DefaultUrlGenerator;
8+
9+
class UrlGenerator extends DefaultUrlGenerator
10+
{
11+
public function getUrl(): string
12+
{
13+
return $this->versionUrl(route('filament.media', $this->media));
14+
}
15+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\Appointments;
6+
7+
use App\Filament\Resources\Appointments\Pages\CalendarAppointments;
8+
use App\Filament\Resources\Appointments\Pages\CreateAppointment;
9+
use App\Filament\Resources\Appointments\Pages\EditAppointment;
10+
use App\Filament\Resources\Appointments\Pages\ListAppointments;
11+
use App\Filament\Resources\Appointments\Pages\ViewAppointment;
12+
use App\Filament\Resources\Appointments\RelationManagers\InterventionsRelationManager;
13+
use App\Filament\Resources\Appointments\Schemas\AppointmentForm;
14+
use App\Filament\Resources\Appointments\Schemas\AppointmentInfolist;
15+
use App\Filament\Resources\Appointments\Tables\AppointmentsTable;
16+
use App\Models\Appointment;
17+
use BackedEnum;
18+
use Filament\Resources\Resource;
19+
use Filament\Schemas\Schema;
20+
use Filament\Support\Icons\Heroicon;
21+
use Filament\Tables\Table;
22+
23+
class AppointmentResource extends Resource
24+
{
25+
protected static ?string $model = Appointment::class;
26+
27+
protected static ?int $navigationSort = 3;
28+
29+
protected static string | BackedEnum | null $navigationIcon = Heroicon::CalendarDateRange;
30+
31+
public static function getModelLabel(): string
32+
{
33+
return __('appointment.label.singular');
34+
}
35+
36+
public static function getPluralModelLabel(): string
37+
{
38+
return __('appointment.label.plural');
39+
}
40+
41+
public static function form(Schema $schema): Schema
42+
{
43+
return AppointmentForm::configure($schema);
44+
}
45+
46+
public static function infolist(Schema $schema): Schema
47+
{
48+
return AppointmentInfolist::configure($schema);
49+
}
50+
51+
public static function table(Table $table): Table
52+
{
53+
return AppointmentsTable::configure($table);
54+
}
55+
56+
public static function getRelations(): array
57+
{
58+
return [
59+
InterventionsRelationManager::class,
60+
];
61+
}
62+
63+
public static function getPages(): array
64+
{
65+
return [
66+
'index' => CalendarAppointments::route('/'),
67+
'list' => ListAppointments::route('/list'),
68+
'create' => CreateAppointment::route('/create'),
69+
'view' => ViewAppointment::route('/{record}'),
70+
'edit' => EditAppointment::route('/{record}/edit'),
71+
];
72+
}
73+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\Appointments\Concerns;
6+
7+
use App\Concerns\TabbedLayout;
8+
use App\Filament\Resources\Appointments\Pages\CalendarAppointments;
9+
use App\Filament\Resources\Appointments\Pages\ListAppointments;
10+
use Filament\Navigation\NavigationItem;
11+
12+
trait HasTabs
13+
{
14+
use TabbedLayout;
15+
16+
public function getTabsNavigation(): array
17+
{
18+
return [
19+
20+
NavigationItem::make()
21+
->label(__('appointment.section.calendar'))
22+
->icon('icon-none')
23+
->url(static::getResource()::getUrl('index'))
24+
->isActiveWhen(fn (): bool => static::class === CalendarAppointments::class),
25+
26+
NavigationItem::make()
27+
->label(__('appointment.section.index'))
28+
->icon('icon-none')
29+
->url(static::getResource()::getUrl('list'))
30+
->isActiveWhen(fn (): bool => static::class === ListAppointments::class),
31+
32+
];
33+
}
34+
35+
public function getHeading(): string
36+
{
37+
return __('appointment.label.plural');
38+
}
39+
40+
public function getBreadcrumbs(): array
41+
{
42+
return [];
43+
}
44+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\Appointments\Pages;
6+
7+
use App\Contracts\Pages\WithTabs;
8+
use App\Filament\Resources\Appointments\AppointmentResource;
9+
use App\Filament\Resources\Appointments\Concerns\HasTabs;
10+
use Filament\Actions\CreateAction;
11+
use Filament\Resources\Pages\Page;
12+
13+
class CalendarAppointments extends Page implements WithTabs
14+
{
15+
use HasTabs;
16+
17+
protected static string $resource = AppointmentResource::class;
18+
19+
protected string $view = 'filament.resources.appointments.pages.calendar-appointments';
20+
21+
protected function getHeaderActions(): array
22+
{
23+
return [
24+
CreateAction::make(),
25+
];
26+
}
27+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Appointments\Pages;
4+
5+
use App\Filament\Resources\Appointments\AppointmentResource;
6+
use Filament\Resources\Pages\CreateRecord;
7+
8+
class CreateAppointment extends CreateRecord
9+
{
10+
protected static string $resource = AppointmentResource::class;
11+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace App\Filament\Resources\Appointments\Pages;
4+
5+
use App\Filament\Resources\Appointments\AppointmentResource;
6+
use Filament\Actions\DeleteAction;
7+
use Filament\Actions\ViewAction;
8+
use Filament\Resources\Pages\EditRecord;
9+
10+
class EditAppointment extends EditRecord
11+
{
12+
protected static string $resource = AppointmentResource::class;
13+
14+
protected function getHeaderActions(): array
15+
{
16+
return [
17+
ViewAction::make(),
18+
DeleteAction::make(),
19+
];
20+
}
21+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\Appointments\Pages;
6+
7+
use App\Contracts\Pages\WithTabs;
8+
use App\Filament\Resources\Appointments\AppointmentResource;
9+
use App\Filament\Resources\Appointments\Concerns\HasTabs;
10+
use Filament\Actions\CreateAction;
11+
use Filament\Resources\Pages\ListRecords;
12+
13+
class ListAppointments extends ListRecords implements WithTabs
14+
{
15+
use HasTabs;
16+
17+
protected static string $resource = AppointmentResource::class;
18+
19+
protected function getHeaderActions(): array
20+
{
21+
return [
22+
CreateAction::make(),
23+
];
24+
}
25+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\Appointments\Pages;
6+
7+
use App\Filament\Resources\Appointments\AppointmentResource;
8+
use Filament\Actions\DeleteAction;
9+
use Filament\Actions\EditAction;
10+
use Filament\Resources\Pages\ViewRecord;
11+
12+
class ViewAppointment extends ViewRecord
13+
{
14+
protected static string $resource = AppointmentResource::class;
15+
16+
public function getTitle(): string
17+
{
18+
$appointment = $this->getRecord();
19+
20+
return __('appointment.header.view', [
21+
'beneficiary' => $appointment->beneficiary?->full_name,
22+
'date' => $appointment->date->toFormattedDate(),
23+
'start_time' => $appointment->start_time,
24+
]);
25+
}
26+
27+
protected function getHeaderActions(): array
28+
{
29+
return [
30+
EditAction::make(),
31+
DeleteAction::make(),
32+
];
33+
}
34+
}

0 commit comments

Comments
 (0)