sedur / filament-anexo-field
v0.1.4
2025-09-13 14:38 UTC
Requires
- filament/filament: ^4.0
README
Um campo customizado para FilamentPHP que permite upload de anexos com workflow de múltiplos passos e feedback em tempo real usando SweetAlert2.
📋 Requerimentos
- Laravel 11+
- Filament 4.x
- PHP 8.2 ou superior
- Livewire 3.x
- SweetAlert2 instalado via NPM:
npm install sweetalert2
📦 Instalação
Via composer (Packagist):
composer require sedur/filament-anexo-field
⚙️ Configuração
O Service Provider é registrado automaticamente pelo Laravel.
Publicar configuração
php artisan vendor:publish --tag="sedur::filament-anexo-field-config"
Arquivo publicado: config/sedur-anexo-field.php
return [ // Disco de upload usado pelo Storage 'upload_disk' => env('SEDUR_ANEXO_FIELD_DISK', env('FILESYSTEM_DISK', 'public')), ];
Publicar views (se quiser sobrescrever)
php artisan vendor:publish --tag="sedur::filament-anexo-field-views"
🚀 Uso
1. Adicione o trait na Page ou Livewire Form
use Sedur\FilamentAnexoField\Concerns\HasAnexoField; class DocumentoCreate extends CreateRecord { use HasAnexoField; }
2. Adicione o campo no schema do formulário
use Sedur\FilamentAnexoField\Components\AnexoField; AnexoField::make('campo_formulario') ->directory(fn() => 'exemplo/art') ->workflow([ AnexoField::step('Preparando documento', function ($arquivo, $contexto) { sleep(1); $contexto['step1'] = true; return $contexto; }), AnexoField::step('Analisando dados', function ($arquivo, $contexto) { sleep(1); $contexto['step2'] = true; $contexto['finalizar'] = true; return $contexto; }), ]) ->catch(function ($arquivo, $contexto, $codigoErro) { return [ 'titulo' => 'Erro', 'descricao' => 'Falha ao processar', ]; });
🔄 Como funciona
-
Upload inicial
- O arquivo é salvo via Livewire no disco configurado (
sedur-anexo-field.upload_disk
).
- O arquivo é salvo via Livewire no disco configurado (
-
Execução de steps
- Cada step é definido via
AnexoField::step($titulo, $callback, $timeoutMs)
. - O callback PHP recebe:
$arquivo
: caminho final do arquivo no storage.$contexto
: array que acumula dados entre os steps.
- O retorno do callback é mesclado ao
$contexto
.
- Cada step é definido via
-
Finalização antecipada
- Se o callback setar
$contexto['finalizar'] = true
, o workflow encerra imediatamente com sucesso.
- Se o callback setar
-
Tratamento de erro
- Se qualquer callback lançar exceção, é chamado o
catch()
definido no campo.
- Se qualquer callback lançar exceção, é chamado o
📜 Licença
Este pacote é open-souce sob a licença MIT.
💡 Créditos
Desenvolvido por CryptoManiacMS.