Skip to content

Commit 7b939ea

Browse files
authored
Merge pull request #119 from devmount/enhancements/action-handling
Action handling
2 parents f65d8f7 + f47cd0e commit 7b939ea

Some content is hidden

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

41 files changed

+1147
-1336
lines changed

app/Enums/ExpenseCategory.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,14 @@ public static function taxCategories(): array
4747
self::Tax,
4848
];
4949
}
50+
51+
public static function options(): array
52+
{
53+
return [
54+
self::Vat->value => __('vat'),
55+
self::Good->value => __('good'),
56+
self::Service->value => __('service'),
57+
self::Tax->value => __('incomeTax'),
58+
];
59+
}
5060
}

app/Filament/Resources/ProjectResource/RelationManagers/EstimatesRelationManager.php renamed to app/Filament/Relations/EstimatesRelationManager.php

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<?php
22

3-
namespace App\Filament\Resources\ProjectResource\RelationManagers;
3+
namespace App\Filament\Relations;
44

5-
use Filament\Forms\Components;
6-
use Filament\Forms\Form;
5+
use App\Filament\Resources\EstimateResource;
76
use Filament\Resources\RelationManagers\RelationManager;
87
use Filament\Support\Enums\FontWeight;
8+
use Filament\Support\Enums\MaxWidth;
99
use Filament\Tables\Actions;
1010
use Filament\Tables\Columns;
1111
use Filament\Tables\Table;
@@ -15,29 +15,6 @@ class EstimatesRelationManager extends RelationManager
1515
{
1616
protected static string $relationship = 'estimates';
1717

18-
public function form(Form $form): Form
19-
{
20-
return $form
21-
->schema([
22-
Components\TextInput::make('title')
23-
->label(__('title'))
24-
->required(),
25-
Components\TextInput::make('amount')
26-
->label(__('estimatedHours'))
27-
->numeric()
28-
->step(0.1)
29-
->minValue(0.1)
30-
->suffix('h')
31-
->suffixIcon('tabler-clock-exclamation')
32-
->required(),
33-
Components\Textarea::make('description')
34-
->label(__('description'))
35-
->autosize()
36-
->columnSpanFull()
37-
->maxLength(65535),
38-
]);
39-
}
40-
4118
public function table(Table $table): Table
4219
{
4320
return $table
@@ -62,12 +39,29 @@ public function table(Table $table): Table
6239
//
6340
])
6441
->headerActions([
65-
Actions\CreateAction::make()->icon('tabler-plus'),
42+
Actions\CreateAction::make()
43+
->icon('tabler-plus')
44+
->form(EstimateResource::formFields())
45+
->slideOver()
46+
->modalWidth(MaxWidth::Large),
6647
])
6748
->actions([
68-
Actions\EditAction::make()->icon('tabler-edit')->label(''),
69-
Actions\ReplicateAction::make()->icon('tabler-copy')->label(''),
70-
Actions\DeleteAction::make()->icon('tabler-trash')->label(''),
49+
Actions\EditAction::make()
50+
->icon('tabler-edit')
51+
->label('')
52+
->form(EstimateResource::formFields())
53+
->slideOver()
54+
->modalWidth(MaxWidth::Large),
55+
Actions\ReplicateAction::make()
56+
->icon('tabler-copy')
57+
->label('')
58+
->form(EstimateResource::formFields())
59+
->slideOver()
60+
->modalWidth(MaxWidth::Large),
61+
Actions\DeleteAction::make()
62+
->icon('tabler-trash')
63+
->label('')
64+
->requiresConfirmation(),
7165
])
7266
->bulkActions([
7367
Actions\BulkActionGroup::make([

app/Filament/Resources/ClientResource/RelationManagers/InvoicesRelationManager.php renamed to app/Filament/Relations/InvoicesRelationManager.php

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
<?php
22

3-
namespace App\Filament\Resources\ClientResource\RelationManagers;
3+
namespace App\Filament\Relations;
44

5+
use App\Filament\Resources\InvoiceResource;
56
use App\Models\Invoice;
7+
use Carbon\Carbon;
68
use Filament\Resources\RelationManagers\RelationManager;
79
use Filament\Support\Enums\FontFamily;
10+
use Filament\Support\Enums\MaxWidth;
811
use Filament\Tables\Actions;
912
use Filament\Tables\Columns;
1013
use Filament\Tables\Table;
11-
use Carbon\Carbon;
1214
use Illuminate\Database\Eloquent\Model;
1315
use Illuminate\Support\Number;
1416

@@ -49,19 +51,26 @@ public function table(Table $table): Table
4951
->state(fn (Invoice $record): float => $record->final)
5052
->description(fn (Invoice $record): string => Number::currency($record->vat, 'eur') . ' ' . __('vat')),
5153
])
52-
->filters([
53-
//
54-
])
5554
->headerActions([
5655
Actions\Action::make('create')
5756
->icon('tabler-plus')
5857
->label(__('create'))
59-
->url(fn (): string => '/invoices/create'),
58+
->form(InvoiceResource::formFields())
59+
->slideOver()
60+
->modalWidth(MaxWidth::ThreeExtraLarge),
6061
])
6162
->actions([
6263
Actions\ActionGroup::make([
63-
Actions\EditAction::make()->icon('tabler-edit'),
64-
Actions\ReplicateAction::make()->icon('tabler-copy'),
64+
Actions\EditAction::make()
65+
->icon('tabler-edit')
66+
->form(InvoiceResource::formFields())
67+
->slideOver()
68+
->modalWidth(MaxWidth::ThreeExtraLarge),
69+
Actions\ReplicateAction::make()
70+
->icon('tabler-copy')
71+
->form(InvoiceResource::formFields())
72+
->slideOver()
73+
->modalWidth(MaxWidth::ThreeExtraLarge),
6574
])
6675
->icon('tabler-dots-vertical')
6776
])
@@ -75,7 +84,9 @@ public function table(Table $table): Table
7584
Actions\Action::make('create')
7685
->icon('tabler-plus')
7786
->label(__('create'))
78-
->url(fn (): string => '/invoices/create'),
87+
->form(InvoiceResource::formFields())
88+
->slideOver()
89+
->modalWidth(MaxWidth::ThreeExtraLarge),
7990
])
8091
->emptyStateIcon('tabler-ban')
8192
->defaultSort('created_at', 'desc')
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
namespace App\Filament\Relations;
4+
5+
use App\Filament\Resources\PositionResource;
6+
use App\Models\Position;
7+
use Filament\Resources\RelationManagers\RelationManager;
8+
use Filament\Support\Enums\FontWeight;
9+
use Filament\Support\Enums\MaxWidth;
10+
use Filament\Tables\Actions;
11+
use Filament\Tables\Columns;
12+
use Filament\Tables\Table;
13+
14+
class PositionsRelationManager extends RelationManager
15+
{
16+
protected static string $relationship = 'positions';
17+
18+
public function table(Table $table): Table
19+
{
20+
return $table
21+
->recordTitle(trans_choice('position', 1))
22+
->heading(trans_choice('position', 2))
23+
->defaultSort('started_at', 'asc')
24+
->columns([
25+
Columns\TextColumn::make('description')
26+
->label(__('description'))
27+
->copyable()
28+
->formatStateUsing(fn (string $state): string => nl2br($state))
29+
->html(),
30+
Columns\TextColumn::make('amount')
31+
->label(trans_choice('hour', 2))
32+
->state(fn (Position $record): float => $record->duration)
33+
->weight(FontWeight::ExtraBold)
34+
->description(fn (Position $record): string => $record->time_range),
35+
Columns\ToggleColumn::make('remote')
36+
->label(__('remote')),
37+
])
38+
->filters([
39+
//
40+
])
41+
->headerActions([
42+
Actions\CreateAction::make()
43+
->icon('tabler-plus')
44+
->form(PositionResource::formFields())
45+
->slideOver()
46+
->modalWidth(MaxWidth::TwoExtraLarge),
47+
])
48+
->actions([
49+
Actions\EditAction::make()
50+
->icon('tabler-edit')
51+
->label('')
52+
->form(PositionResource::formFields())
53+
->slideOver()
54+
->modalWidth(MaxWidth::TwoExtraLarge),
55+
Actions\ReplicateAction::make()
56+
->icon('tabler-copy')
57+
->label('')
58+
->form(PositionResource::formFields())
59+
->slideOver()
60+
->modalWidth(MaxWidth::TwoExtraLarge),
61+
Actions\DeleteAction::make()
62+
->icon('tabler-trash')
63+
->label('')
64+
->requiresConfirmation(),
65+
])
66+
->bulkActions([
67+
Actions\BulkActionGroup::make([
68+
Actions\DeleteBulkAction::make()->icon('tabler-trash'),
69+
])
70+
->icon('tabler-dots-vertical'),
71+
])
72+
->emptyStateActions([
73+
Actions\CreateAction::make()->icon('tabler-plus'),
74+
])
75+
->paginated(false);
76+
}
77+
78+
public static function getModelLabel(): string
79+
{
80+
return trans_choice('position', 1);
81+
}
82+
}

app/Filament/Resources/ClientResource/RelationManagers/ProjectsRelationManager.php renamed to app/Filament/Relations/ProjectsRelationManager.php

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
<?php
22

3-
namespace App\Filament\Resources\ClientResource\RelationManagers;
3+
namespace App\Filament\Relations;
44

5+
use App\Filament\Resources\ProjectResource;
56
use App\Models\Project;
67
use Filament\Resources\RelationManagers\RelationManager;
78
use Filament\Tables\Actions;
89
use Filament\Tables\Table;
910
use Filament\Tables\Columns;
11+
use Filament\Support\Enums\MaxWidth;
1012
use Illuminate\Database\Eloquent\Model;
1113
use Carbon\Carbon;
14+
use Livewire\Component;
1215

1316
class ProjectsRelationManager extends RelationManager
1417
{
@@ -33,7 +36,7 @@ public function table(Table $table): Table
3336
->label(__('scope'))
3437
->state(fn (Project $record): string => $record->scope_range),
3538
Columns\TextColumn::make('price_per_unit')
36-
->label(__('price_per_unit'))
39+
->label(__('price'))
3740
->state(fn (Project $record): string => $record->price_per_unit),
3841
Columns\TextColumn::make('progress')
3942
->label(__('progress'))
@@ -50,23 +53,32 @@ public function table(Table $table): Table
5053
->toggleable(isToggledHiddenByDefault: true),
5154
])
5255
->defaultSort('start_at', 'desc')
53-
->filters([
54-
//
55-
])
5656
->headerActions([
5757
Actions\Action::make('create')
5858
->icon('tabler-plus')
5959
->label(__('create'))
60-
->url(fn (): string => '/projects/create'),
60+
->beforeFormFilled(function (Component $livewire) {
61+
$livewire->mountedTableActionsData[0]['client_id'] = $this->ownerRecord->id;
62+
})
63+
->form(ProjectResource::formFields(useSection: false))
64+
->slideOver()
65+
->modalWidth(MaxWidth::Large),
6166
])
6267
->actions([
6368
Actions\ActionGroup::make([
64-
Actions\EditAction::make()->icon('tabler-edit'),
65-
Actions\ReplicateAction::make()->icon('tabler-copy'),
69+
Actions\EditAction::make()
70+
->icon('tabler-edit')
71+
->form(ProjectResource::formFields(useSection: false))
72+
->slideOver()
73+
->modalWidth(MaxWidth::Large),
74+
Actions\ReplicateAction::make()
75+
->icon('tabler-copy')
76+
->form(ProjectResource::formFields(useSection: false))
77+
->slideOver()
78+
->modalWidth(MaxWidth::Large),
6679
])
6780
->icon('tabler-dots-vertical')
68-
])
69-
->bulkActions([]);
81+
]);
7082
}
7183

7284
public static function getTitle(Model $ownerRecord, string $pageClass): string

0 commit comments

Comments
 (0)