PHPackages                             thiktak/filament-nested-builder-form - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. thiktak/filament-nested-builder-form

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

thiktak/filament-nested-builder-form
====================================

Plugin for FilamentPHP - Nested Builder Form Component

v1.0.1(2y ago)208.6k17[3 issues](https://github.com/Thiktak/filament-nested-builder-form/issues)[5 PRs](https://github.com/Thiktak/filament-nested-builder-form/pulls)1MITPHPPHP ^8.1

Since Sep 10Pushed 1y ago1 watchersCompare

[ Source](https://github.com/Thiktak/filament-nested-builder-form)[ Packagist](https://packagist.org/packages/thiktak/filament-nested-builder-form)[ Docs](https://github.com/Thiktak/filament-nested-builder-form)[ GitHub Sponsors](https://github.com/Thiktak)[ RSS](/packages/thiktak-filament-nested-builder-form/feed)WikiDiscussions 3.x Synced 1mo ago

READMEChangelog (2)Dependencies (14)Versions (6)Used By (1)

[![Preview](https://private-user-images.githubusercontent.com/1201486/268125884-17f4bf1c-6b80-4eef-8bcb-57b77166d444.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ4ODI0MjMsIm5iZiI6MTc3NDg4MjEyMywicGF0aCI6Ii8xMjAxNDg2LzI2ODEyNTg4NC0xN2Y0YmYxYy02YjgwLTRlZWYtOGJjYi01N2I3NzE2NmQ0NDQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMzBUMTQ0ODQzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2QxYTk1MjQ0MjAwOTA2YjEzMTRkMzA1MDM4ZWFlYmJhYTcwYzhjNmE5YzFjZmY0NDk1MzI2YTZiNGQyMTU1NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.kHEfN93NhY3S0jQJNTESCqL4hDmoKzOGek3lbJtpvME)](https://private-user-images.githubusercontent.com/1201486/268125884-17f4bf1c-6b80-4eef-8bcb-57b77166d444.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ4ODI0MjMsIm5iZiI6MTc3NDg4MjEyMywicGF0aCI6Ii8xMjAxNDg2LzI2ODEyNTg4NC0xN2Y0YmYxYy02YjgwLTRlZWYtOGJjYi01N2I3NzE2NmQ0NDQucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMzBUMTQ0ODQzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9Y2QxYTk1MjQ0MjAwOTA2YjEzMTRkMzA1MDM4ZWFlYmJhYTcwYzhjNmE5YzFjZmY0NDk1MzI2YTZiNGQyMTU1NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.kHEfN93NhY3S0jQJNTESCqL4hDmoKzOGek3lbJtpvME)Nested Builder Form (Filament v3 Form)
======================================

[](#nested-builder-form-filament-v3-form)

[![Latest Version on Packagist](https://camo.githubusercontent.com/b24764a429d43e1d75e84135561ac2f994e3164f89300d7a3708870a3c3d16f6/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f7468696b74616b2f66696c616d656e742d6e65737465642d6275696c6465722d666f726d2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/thiktak/filament-nested-builder-form)[![GitHub Tests Action Status](https://camo.githubusercontent.com/82bb02b25a397ea51db921eb46e14e2edca482e10cd84f2ad5a718d34d6920ae/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7468696b74616b2f66696c616d656e742d6e65737465642d6275696c6465722d666f726d2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/thiktak/filament-nested-builder-form/actions?query=workflow%3Arun-tests+branch%3Amain)[![GitHub Code Style Action Status](https://camo.githubusercontent.com/3ab54290fd60a7c9c2be0d034cf81460ada98d74347a690d71737466e9b33d34/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f7468696b74616b2f66696c616d656e742d6e65737465642d6275696c6465722d666f726d2f6669782d7068702d636f64652d7374796c652d6973737565732e796d6c3f6272616e63683d6d61696e266c6162656c3d636f64652532307374796c65267374796c653d666c61742d737175617265)](https://github.com/thiktak/filament-nested-builder-form/actions?query=workflow%3A%22Fix+PHP+code+style+issues%22+branch%3Amain)[![Total Downloads](https://camo.githubusercontent.com/bc076011de995a219cb8867b6954b7a3c3c6fe4650e1ccda6368b3220b80e40b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f7468696b74616b2f66696c616d656e742d6e65737465642d6275696c6465722d666f726d2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/thiktak/filament-nested-builder-form)

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

Installation
------------

[](#installation)

You can install the package via composer:

```
composer require thiktak/filament-nested-builder-form
```

Usage
-----

[](#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](https://private-user-images.githubusercontent.com/1201486/266845532-11c5a674-c001-4508-b7ca-0a6a318a1ba0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ4ODI0MjMsIm5iZiI6MTc3NDg4MjEyMywicGF0aCI6Ii8xMjAxNDg2LzI2Njg0NTUzMi0xMWM1YTY3NC1jMDAxLTQ1MDgtYjdjYS0wYTZhMzE4YTFiYTAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMzBUMTQ0ODQzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzllM2E1NTNjMTYzZTJkYmQ4M2U0NzExMTcxODFmZDFkM2RiOGYxNWQ2YzExOGE3NTY4OTM1NGVkODk5OWE2NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.pWb-I97SVTyPOERXuzSHKMcQQ4prsqXgjVrxdyuxMQ8)](https://private-user-images.githubusercontent.com/1201486/266845532-11c5a674-c001-4508-b7ca-0a6a318a1ba0.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NzQ4ODI0MjMsIm5iZiI6MTc3NDg4MjEyMywicGF0aCI6Ii8xMjAxNDg2LzI2Njg0NTUzMi0xMWM1YTY3NC1jMDAxLTQ1MDgtYjdjYS0wYTZhMzE4YTFiYTAucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDMzMCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjAzMzBUMTQ0ODQzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9NzllM2E1NTNjMTYzZTJkYmQ4M2U0NzExMTcxODFmZDFkM2RiOGYxNWQ2YzExOGE3NTY4OTM1NGVkODk5OWE2NiZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QifQ.pWb-I97SVTyPOERXuzSHKMcQQ4prsqXgjVrxdyuxMQ8)

Example
-------

[](#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(['=', '', '>', '', '
