Skip to content

Advanced fields (Multiple Choice Grid/Radio Grid, Checkbox Grid, ...) for Filament's Form Builders

License

Notifications You must be signed in to change notification settings

linhntaim/advanced-fields

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Advanced fields for Form Builders of Filament

Latest Version on Packagist Total Downloads

This is where your description should go. Limit it to a paragraph or two. Consider adding a small example.

Installation

You can install the package via composer:

composer require linhntaim/advanced-fields

Optionally, you can publish the views using

php artisan vendor:publish --tag="advanced-fields-views"

Usage

Grid Fields

Currently, supports: RadioGrid, CheckboxGrid.

use Filament\Schemas\Schema;
use LinhntAim\AdvancedFields\RadioGrid;
use LinhntAim\AdvancedFields\CheckboxGrid;

public function mount(): void
{
    $this->form->fill([

        // format of the state used for RadioGrid
        'filled_radio_grid' => [
            'row_1' => 'column_c',
            'row_2' => 'column_b',
            'row_3' => 'column_a',
        ],

        // format of the state used for CheckboxGrid
        'filled_checkbox_grid' => [
            'row_1' => [
                'column_c',
                'column_a',
            ],
            'row_2' => [
                'column_b',
                'column_c',
            ],
            'row_3' => [
                'column_a',
                'column_b',
            ],
        ],

    ]);
}

public function form(Schema $schema): Schema
{
    return $schema->components([

        ...,

        RadioGrid::make('radio_grid')
            ->options([
                'column_a' => 'Column A',
                'column_b' => 'Column B',
                'column_c' => 'Column C',
            ])
            ->rows([
                'row_1' => 'Row 1',
                'row_2' => 'Row 2',
                'row_3' => 'Row 3',
            ])
            // optionally, (one) radio must be checked in each row
            ->required()
            // optionally, disable specific column option(s)
            ->disableOptionWhen(fn($value) => $value == 'column_b')
            // optionally, set the label of the "Clear selection" button
            // - note: the button will be shown after checking any radio if not required
            ->clearButtonLabel('X'),

        ...,

        CheckboxGrid::make('checkbox_grid')
            ->options([
                'column_a' => 'Column A',
                'column_b' => 'Column B',
                'column_c' => 'Column C',
            ])
            ->rows([
                'row_1' => 'Row 1',
                'row_2' => 'Row 2',
                'row_3' => 'Row 3',
            ])
            // optionally, at least one checkbox must be checked in each row 
            ->required()
            // optionally, disable specific column option(s)
            ->disableOptionWhen(fn($value) => $value == 'column_b'),

        ...,

    ]);
}

Sample light theme

Sample dark theme

Changelog

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

License

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