Plugins
Nested Builder Form Field
Add nested Builder to your forms
Form Field
Dark theme support
Yes
Multi language support
No
Compatible with the latest version
Supported versions: 3.x
Documentation
Preview

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Filament V3 Form plugin. Add a new feature for Nested Builder.

#Installation

You can install the package via composer:

composer require thiktak/filament-nested-builder-form

#Usage

On any Form :

  1. Call NestedBuilder instead of Builder
  2. All all your Builder configuration inside nestedConfiguration(Closure).
  3. Use nestedSchema(Closure) instad of schema(Closure | array)

Use $builder->getLevel() of NestedSubBuilder to know where you are (level 1 to n)

Note:

  • NestedBuilder like Builder works with an array/json data.
 
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder;
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder;
// ...
 
NestedBuilder::make('array_configuration')
// Add configuration to Builder & sub-builder
->nestedConfiguration(function (NestedSubBuilder $builder) {
// Apply only for the root level
$builder->blockNumbers($builder->getLevel() == 1);
 
// Apply for all others levels
$builder->columnSpanFull(); // full width
})
 
// Replace schema() by nestedSchema
->nestedSchema(function (NestedSubBuilder $builder) { // Closure is mandatory
return [
Block::make('group')
->schema([
Select::make('title')
->required(),
 
// Call builder importer and call it children
$builder->importNestedBlocks('children'),
]),
 
Block::make('rule')
->schema([
TextInput::make('field')
->required(),
])
];
});

image

#Example

One concrete example of this package, allow you to create a nested AND/OR field/condition/value like complexe group SQL queries.

use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder;
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder;
// ...
 
NestedBuilder::make('array_configuration')
->nestedConfiguration(function (NestedSubBuilder $builder) {
$builder->blockNumbers($builder->getLevel() == 1);
$builder->columnSpanFull(); // full width
})
->nestedSchema(function (NestedSubBuilder $builder) {
return [
Block::make('group')
->label(sprintf('Group (%s)', $builder->getLevel()))
->schema([
Select::make('condition')
->options(['and' => 'AND', 'or' => 'OR'])
->default('and')
->required(),
 
$builder->importNestedBlocks('children'),
])
->columns(1),
 
Block::make('rule')
->label(sprintf('Rule (%s)', $builder->getLevel()))
->schema([
TextInput::make('field')
->required()
->columnSpan(2),
 
Select::make('sign')
->options(['=', '<>', '>', '<', 'in(,)'])
->default('=')
->required(),
 
TextInput::make('value')
->columnSpan(3),
])
->columns(6)
];
});

image

#Example of advanced usage of this package:

image

#How it work ?

You can achieve the same behavior with few lines of code.

  1. Create a function with your builder ($nested = fn($builder) => [...];)
  2. On your schema, pass the function that call itself inside a lambda function (fn() => $nested($nested)).
  3. On you builder function, add a new Builder with identical logic (Builder::make()->schema(fn() => $builder($builder)))

Example:

use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedBuilder;
use Thiktak\FilamentNestedBuilderForm\Forms\Components\NestedSubBuilder;
// ...
 
public static function form(Form $form): Form
{
$nested = function ($builder) {
return [
Block::make('group')
->schema([
Select::make('condition')
->options(['and' => 'AND', 'or' => 'OR'])
->default('and')
->required(),
 
\Filament\Forms\Components\Builder::make('children')
->schema(fn () => $builder($builder))
])
->columns(1),
 
Block::make('rule')
->schema([
TextInput::make('field')
->required()
->columnSpan(2),
 
Select::make('sign')
->options(['=', '<>', '>', '<', 'in(,)'])
->default('=')
->required(),
 
TextInput::make('value')
->columnSpan(3),
])
->columns(6)
];
};
 
 
return $form
->schema([
\Filament\Forms\Components\Builder::make('array_configuration')
->schema(fn () => $nested($nested))
]);
}

Use thiktak/filament-nested-builder-form if you want to implement a rich SQL selector & query builder.

#Testing

composer test

#Changelog

Please see CHANGELOG for more information on what has changed recently.

#Contributing

Please see CONTRIBUTING for details.

#Security Vulnerabilities

Please review our security policy on how to report security vulnerabilities.

#Credits

#License

The MIT License (MIT). Please see License File for more information.

Georges OLIVARES

Thiktak is a SAP software developer also passionate about PHP and Laravel.

2
Plugins
33
Stars
More from this author
Featured Plugins