Skip to content

Commit b32a19f

Browse files
committed
Added filamentphp v4 support
1 parent 930adda commit b32a19f

File tree

6 files changed

+63
-36
lines changed

6 files changed

+63
-36
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
],
2121
"require": {
2222
"php": "^8.1",
23-
"filament/filament": "^3.0",
23+
"filament/filament": "^4.0",
2424
"glorand/laravel-model-settings": "^6.0|^7.0|^8.0",
2525
"illuminate/contracts": "^10.0|^11.0|^12.0",
2626
"spatie/laravel-package-tools": "^1.15.0"
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
<x-filament-panels::page>
2-
<x-filament-panels::form wire:submit="save">
3-
{{ $this->form }}
2+
<form wire:submit="save" class="space-y-6">
3+
<div>
4+
{{ $this->form }}
5+
</div>
46

5-
<x-filament-panels::form.actions
7+
<x-filament::actions
68
:actions="$this->getCachedFormActions()"
7-
:full-width="$this->hasFullWidthFormActions()"
8-
/>
9-
</x-filament-panels::form>
10-
</x-filament-panels::page>
9+
:full-width="$this->hasFullWidthFormActions()"/>
10+
11+
</form>
12+
</x-filament-panels::page>

src/FilamentModelSettingsServiceProvider.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
namespace Quadrubo\FilamentModelSettings;
44

5+
use Filament\Infolists\Components\TextEntry;
6+
use Filament\Tables\Columns\Column;
7+
use Filament\Tables\Columns\TextColumn;
8+
use Quadrubo\FilamentModelSettings\Macros\IsModelSetting;
59
use Filament\Forms\Components\Field;
610
use Illuminate\Filesystem\Filesystem;
711
use Livewire\Features\SupportTesting\Testable;
@@ -47,7 +51,9 @@ public function packageBooted(): void
4751
}
4852

4953
// Macros
50-
Field::macro('isModelSetting', app(\Quadrubo\FilamentModelSettings\Macros\IsModelSetting::class)());
54+
Field::macro('isModelSetting', app(IsModelSetting::class)->field());
55+
TextColumn::macro('isModelSetting', app(IsModelSetting::class)->textColumn());
56+
TextEntry::macro('isModelSetting', app(IsModelSetting::class)->textEntry());
5157

5258
// Testing
5359
Testable::mixin(new TestsFilamentModelSettings);

src/Macros/IsModelSetting.php

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Quadrubo\FilamentModelSettings\Macros;
44

55
use Filament\Forms\Components\Field;
6+
use Filament\Tables\Columns\TextColumn;
67

78
/**
89
* @param string $prefix
@@ -13,7 +14,7 @@
1314
*/
1415
class IsModelSetting
1516
{
16-
public function __invoke()
17+
public function field()
1718
{
1819
return function (string $prefix = 'settings') {
1920
/** @var \Filament\Forms\Components\Field $this */
@@ -38,4 +39,34 @@ public function __invoke()
3839
return $this;
3940
};
4041
}
42+
43+
public function textColumn()
44+
{
45+
return function () {
46+
47+
/** @var \Filament\Tables\Columns\TextColumn $this */
48+
// default is important, otherwise formatStateUsing will not be called since it's not a field
49+
$this->default('settings');
50+
$this->formatStateUsing(function ($column, $livewire, $record) {
51+
52+
if (! method_exists($record, 'settings')) {
53+
return '';
54+
}
55+
56+
return $record->settings()->get($column->name);
57+
});
58+
59+
return $this;
60+
};
61+
}
62+
63+
public function textEntry()
64+
{
65+
return function () {
66+
/** @var \Filament\Infolists\Components\TextEntry $this */
67+
$this->getStateUsing(fn ($record) => $record->settings()->get($this->getStatePath()));
68+
69+
return $this;
70+
};
71+
}
4172
}

src/Pages/ModelSettingsPage.php

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,20 @@
55
use Filament\Actions\Action;
66
use Filament\Actions\ActionGroup;
77
use Filament\Forms\Contracts\HasForms;
8-
use Filament\Forms\Form;
98
use Filament\Notifications\Notification;
10-
use Filament\Pages\Concerns;
9+
use Filament\Pages\Concerns\InteractsWithFormActions;
1110
use Filament\Pages\Page;
11+
use Filament\Schemas\Schema;
1212
use Filament\Support\Exceptions\Halt;
1313
use Glorand\Model\Settings\Contracts\SettingsManagerContract;
1414
use Quadrubo\FilamentModelSettings\Exceptions\HasModelSettingsNotImplementedException;
1515
use Quadrubo\FilamentModelSettings\Pages\Contracts\HasModelSettings;
1616

1717
class ModelSettingsPage extends Page implements HasForms
1818
{
19-
use Concerns\InteractsWithFormActions;
19+
use InteractsWithFormActions;
2020

21-
protected static string $view = 'filament-model-settings::pages.model-settings-page';
21+
protected string $view = 'filament-model-settings::pages.model-settings-page';
2222

2323
/**
2424
* @var array<string, mixed> | null
@@ -147,24 +147,12 @@ public function getSubmitFormAction(): Action
147147
return $this->getSaveFormAction();
148148
}
149149

150-
public function form(Form $form): Form
150+
public function form(Schema $schema): Schema
151151
{
152-
return $form;
153-
}
154-
155-
/**
156-
* @return array<int | string, string | Form>
157-
*/
158-
protected function getForms(): array
159-
{
160-
return [
161-
'form' => $this->form(
162-
$this->makeForm()
163-
->statePath('data')
164-
->columns(2)
165-
->inlineLabel($this->hasInlineLabels()),
166-
),
167-
];
152+
return $schema
153+
->statePath('data')
154+
->columns(2)
155+
->inlineLabel($this->hasInlineLabels());
168156
}
169157

170158
public function getRedirectUrl(): ?string

stubs/ModelSettingsPage.stub

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
namespace {{ namespace }};
44

55
{{ clusterImport }}use Filament\Forms;
6-
use Filament\Forms\Form;
6+
use Filament\Schemas\Schema;
77
use Quadrubo\FilamentModelSettings\Pages\ModelSettingsPage;
88
use Quadrubo\FilamentModelSettings\Pages\Contracts\HasModelSettings;
99

1010
class {{ class }} extends ModelSettingsPage implements HasModelSettings
1111
{
12-
protected static ?string $navigationIcon = 'heroicon-o-cog-6-tooth';{{ clusterAssignment }}
12+
protected static string|\BackedEnum|null $navigationIcon = 'heroicon-o-cog-6-tooth';{{ clusterAssignment }}
1313

1414
public static function getSettingRecord()
1515
{
1616
// return auth()->user();
1717
}
1818

19-
public function form(Form $form): Form
19+
public function form(Schema $schema): Schema
2020
{
21-
return $form
21+
return parent::form($schema)
2222
->schema([
2323
// ...
2424
]);
2525
}
26-
}
26+
}

0 commit comments

Comments
 (0)