Skip to content

Commit fb0f224

Browse files
committed
add fieldset schema
1 parent a65a64f commit fb0f224

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

src/Enums/Schema.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ enum Schema: string
1010

1111
case Section = 'section';
1212
case Grid = 'grid';
13+
case Fieldset = 'fieldset';
1314
}

src/Schemas/Fieldset.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Backstage\Fields\Schemas;
4+
5+
use Backstage\Fields\Contracts\SchemaContract;
6+
use Backstage\Fields\Models\Schema;
7+
use Filament\Forms\Components\TextInput;
8+
use Filament\Forms\Components\Toggle;
9+
use Filament\Forms\Components\Fieldset as FilamentFieldset;
10+
use Filament\Schemas\Components\Grid;
11+
use Filament\Schemas\Components\Utilities\Get;
12+
13+
class Fieldset extends Base implements SchemaContract
14+
{
15+
public static function getDefaultConfig(): array
16+
{
17+
return [
18+
...parent::getDefaultConfig(),
19+
'label' => null,
20+
'columns' => 1,
21+
'collapsible' => false,
22+
'collapsed' => false,
23+
];
24+
}
25+
26+
public static function make(string $name, Schema $schema): FilamentFieldset
27+
{
28+
$fieldset = FilamentFieldset::make($schema->config['label'] ?? self::getDefaultConfig()['label'])
29+
->columns($schema->config['columns'] ?? self::getDefaultConfig()['columns'])
30+
->collapsible($schema->config['collapsible'] ?? self::getDefaultConfig()['collapsible'])
31+
->collapsed($schema->config['collapsed'] ?? self::getDefaultConfig()['collapsed']);
32+
33+
return $fieldset;
34+
}
35+
36+
public function getForm(): array
37+
{
38+
return [
39+
Grid::make(2)
40+
->schema([
41+
TextInput::make('config.label')
42+
->label(__('Label'))
43+
->live(onBlur: true),
44+
TextInput::make('config.columns')
45+
->label(__('Columns'))
46+
->numeric()
47+
->minValue(1)
48+
->maxValue(12)
49+
->default(1)
50+
->live(onBlur: true),
51+
]),
52+
Grid::make(2)
53+
->schema([
54+
Toggle::make('config.collapsible')
55+
->label(__('Collapsible'))
56+
->inline(false)
57+
->live(),
58+
Toggle::make('config.collapsed')
59+
->label(__('Collapsed'))
60+
->inline(false)
61+
->visible(fn (Get $get): bool => $get('config.collapsible')),
62+
]),
63+
];
64+
}
65+
}

0 commit comments

Comments
 (0)