FilamentF
Filament6mo ago
Liam

Repeater "Table" with dynamic columns

I'm trying to make a dynamic "table" form using repeaters to add any number of rows and columns. Row headers need to be customisable so the existing Repeater@table doesn't fit the bill. I've tried a few odd things but just trimmed it down to this for an example.

Examples of problems in thread

return $schema->columns(1)->components([
    Hidden::make('columns')->default(2)->live(),

    Section::make('Table Structure')
        ->schema([
            Repeater::make('headers')
                ->label('Table Headers')
                ->simple(
                    TextInput::make('header')
                        ->placeholder('Column header')
                        ->required()
                )
                ->addActionLabel('Add Header')
                ->defaultItems(2)
                ->minItems(2)
                ->addable(false)
                ->deletable(false)
                ->reorderable(false)
                ->grid(fn (Get $get) => $get('../columns')),

            Repeater::make('rows')
                ->label('Table Rows')
                ->simple(
                    Repeater::make('row')
                        ->simple(
                            TextInput::make('cell')
                                ->placeholder('Cell content')
                                ->default('')
                        )
                        ->minItems(1)
                        ->defaultItems(fn (Get $get) => $get('../../columns'))
                        ->addable(false)
                        ->deletable(false)
                        ->reorderable(false)
                        ->grid(fn (Get $get) => $get('../../columns'))
                )
                ->addActionLabel('Add Row')
                ->defaultItems(1)
                ->minItems(1)
                ->collapsed(),
        ]),
    Actions::make([
        Action::make('Add Column')
            ->action(fn (Get $get, Set $set) => $set('columns', $get('columns') + 1)),
    ]),

]);
Was this page helpful?