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

Livewire Import Easy Laravel Package

gsferro/livewire-import-easy

Componente Livewire (v3) pronto para importação “easy” de arquivos no Laravel 10+ usando maatwebsite/excel. Estenda LivewireImportEasy, defina a classe de importação, personalize accept, rótulo, ícone e mensagens de progresso/finalização.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Install the package:
    composer require gsferro/livewire-import-easy
    
  2. Publish the config (if customization is needed):
    php artisan vendor:publish --provider="Gsferro\LivewireImportEasy\Providers\LivewireImportEasyServiceProvider" --force
    
  3. Extend your Livewire component:
    use Gsferro\LivewireImportEasy\Livewire\LivewireImportEasy;
    
    class YourImportComponent extends LivewireImportEasy
    {
        public string $importClass = \App\Imports\YourImportClass::class;
        public ?string $accept = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel';
    }
    
  4. Use the component in your Blade view:
    <x-livewire-import-easy
        :accept="$accept"
        :label="'Import CSV'"
        :icon="'fa-solid fa-file-import'"
    />
    

First Use Case

Create a basic import class (e.g., app/Imports/YourImportClass.php) to handle the import logic:

use Maatwebsite\Excel\Concerns\ToModel;

class YourImportClass implements ToModel
{
    public function model(array $row)
    {
        return new YourModel([
            'column1' => $row[0],
            'column2' => $row[1],
        ]);
    }
}

Implementation Patterns

Core Workflow

  1. Component Extension: Extend LivewireImportEasy and define:

    • $importClass: Path to your import class (e.g., App\Imports\YourImportClass).
    • $accept: MIME types for file upload (e.g., 'application/vnd.ms-excel' for .xls).
  2. Customization: Override default messages, labels, or icons:

    public string $importingMessage = 'Processing file...';
    public string $label = 'Upload Data';
    
  3. Integration with Excel: Use maatwebsite/excel concerns (ToModel, WithHeadingRow, etc.) in your import class.

  4. Handling Events: Listen to importing and importFinished states for UI feedback:

    @if($importing)
        <div class="alert">{{ $importingMessage }}</div>
    @endif
    

Advanced Patterns

  • Batch Processing: Implement WithBatchInserts or WithChunkReading in your import class for large files:

    use Maatwebsite\Excel\Concerns\WithBatchInserts;
    
    class LargeFileImport implements WithBatchInserts
    {
        public function batchSize(): int
        {
            return 1000;
        }
    }
    
  • Validation: Add validation in your import class:

    use Maatwebsite\Excel\Concerns\WithValidation;
    
    class ValidatedImport implements WithValidation
    {
        public function rules(): array
        {
            return [
                'column1' => 'required|email',
            ];
        }
    }
    
  • Dynamic Imports: Use a dynamic $importClass based on user input:

    public string $importClass;
    
    public function mount()
    {
        $this->importClass = request('import_type') === 'csv'
            ? \App\Imports\CSVImport::class
            : \App\Imports\ExcelImport::class;
    }
    

Gotchas and Tips

Pitfalls

  1. Missing Dependencies: Ensure maatwebsite/excel is installed and configured. Run:

    composer require maatwebsite/excel
    php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config
    
  2. File Size Limits: Default PHP upload limits may block large files. Adjust in php.ini or .env:

    upload_max_filesize = 20M
    post_max_size = 20M
    
  3. Livewire State Persistence: Avoid storing large datasets in Livewire properties. Use database transactions or queues for heavy imports.

  4. Icon/Font Issues: Ensure fa-solid or your chosen icon library is loaded in Blade:

    @vite(['resources/css/app.css', 'resources/js/app.js'])
    

Debugging Tips

  • Check Import Logs: Enable Laravel logging in your import class:

    use Illuminate\Support\Facades\Log;
    
    public function model(array $row)
    {
        Log::debug('Importing row:', $row);
        return new YourModel(...);
    }
    
  • Validate File Types: Explicitly check file types in your component:

    public function updatedFile($file)
    {
        if (!$file || !in_array($file->getClientMimeType(), explode(',', $this->accept))) {
            $this->addError('file', 'Invalid file type.');
        }
    }
    

Extension Points

  1. Custom UI Components: Override the default Blade component (livewire-import-easy.blade.php) by publishing and modifying:

    php artisan vendor:publish --tag=livewire-import-easy-views
    
  2. Post-Import Actions: Trigger actions after import (e.g., notifications, redirects):

    protected function importFinished()
    {
        session()->flash('success', $this->importFinishedMessage);
        return redirect()->to('/dashboard');
    }
    
  3. Multi-Step Imports: Use Livewire’s emit() to communicate between components during import:

    $this->emit('import-progress', ['step' => 1, 'total' => 100]);
    
  4. Localization: Localize messages by extending the component and overriding text properties:

    public string $importingMessage = trans('import.processing');
    
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.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
andydefer/laravel-cluster
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky