Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Infolists Laravel Package

filament/infolists

Build rich, read-only detail views in Filament with Infolists. Compose fields, sections, and layouts to display record data in panels, resources, and pages, with configurable formatting, visibility rules, and responsive components for admin UIs.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require filament/infolists
    

    Publish the package assets (if needed):

    php artisan vendor:publish --provider="Filament\Infolists\InfolistsServiceProvider"
    
  2. First Use Case Create a Livewire component that displays read-only data:

    use Filament\Infolists\Infolist;
    use Filament\Infolists\Components\TextEntry;
    
    public function infolist(): Infolist
    {
        return Infolist::make()
            ->schema([
                TextEntry::make('name'),
                TextEntry::make('email'),
            ]);
    }
    
  3. Where to Look First

    • Documentation
    • vendor/filament/infolists/src for core logic
    • resources/views/vendor/filament/infolists for default Blade templates

Implementation Patterns

Common Workflows

  1. Basic Data Display

    Infolist::make()
        ->schema([
            TextEntry::make('title'),
            TextEntry::make('created_at')->date(),
        ]);
    
  2. Nested Relationships

    Infolist::make()
        ->schema([
            TextEntry::make('user.name'),
            TextEntry::make('user.email'),
        ]);
    
  3. Conditional Rendering

    Infolist::make()
        ->schema([
            TextEntry::make('status')
                ->visible(fn ($record) => $record->status === 'active'),
        ]);
    
  4. Custom Components

    use Filament\Infolists\Components\IconEntry;
    
    Infolist::make()
        ->schema([
            IconEntry::make('status')
                ->icon(fn ($record) => $record->status === 'active' ? 'heroicon-o-check-circle' : 'heroicon-o-x-circle'),
        ]);
    
  5. Integration with Filament Admin

    use Filament\Tables\Table;
    
    Table::make(Post::class)
        ->columns([...])
        ->actions([
            Tables\Actions\ViewAction::make()
                ->infolist(fn ($record) => Infolist::make()
                    ->schema([...])
                ),
        ]);
    

Best Practices

  • Reusability: Define infolists in a separate trait or service for shared logic.
  • Testing: Mock Infolist components in unit tests using Infolist::make().
  • Performance: Avoid complex computations in ->getState() or ->getRecord() methods.

Gotchas and Tips

Pitfalls

  1. State vs Record Confusion

    • ->getState() returns the Livewire component state (e.g., form inputs).
    • ->getRecord() returns the model instance.
    • Fix: Use ->getRecord() for model data unless you explicitly need state.
  2. Nested Relationships and Lazy Loading

    • Eager-load relationships to avoid N+1 queries:
      $record->load('user'); // Before passing to Infolist
      
  3. Blade Template Overrides

    • Customize default views by publishing assets:
      php artisan vendor:publish --tag="filament-infolists-views"
      
    • Override paths: resources/views/vendor/filament/infolists/components/.
  4. Livewire State Persistence

    • Infolists are Livewire components; state persists across requests.
    • Clear state manually if needed:
      $this->resetInfolistState();
      

Debugging Tips

  • Log Data:
    dd($this->infolist()->getRecord());
    
  • Check Schema:
    dd($this->infolist()->schema);
    
  • Inspect Rendered HTML: Use browser dev tools to verify component output.

Extension Points

  1. Custom Components Extend Filament\Infolists\Components\InfolistComponent:

    class CustomEntry extends InfolistComponent
    {
        protected string $view = 'filament.infolists.components.custom-entry';
    }
    
  2. Modify Default Behavior Override Infolist class methods (e.g., getSchema()) in a subclass.

  3. Localization Use Filament’s localization system:

    TextEntry::make('title')->label(__('filament-infolists::fields.title'));
    
  4. Styling Target classes like .filament-infolist-entry in CSS:

    .filament-infolist-entry { padding: 0.5rem; }
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4