use Filament\Actions\Action;
use Filament\Forms\Components\Wizard;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\FileUpload;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class ImportDataAction extends Action
{
public static function getDefaultName(): ?string
{
return 'import';
}
protected function setUp(): void
{
parent::setUp();
$this->label('Import Data');
$this->icon('heroicon-o-arrow-down-tray');
$this->modalWidth('3xl');
$this->steps([
Wizard\Step::make('Upload')
->schema([
FileUpload::make('file')
->label('CSV File')
->acceptedFileTypes(['text/csv'])
->required(),
]),
Wizard\Step::make('Configure')
->schema([
Select::make('delimiter')
->options([
',' => 'Comma (,)',
';' => 'Semicolon (;)',
'\t' => 'Tab',
])
->default(',')
->required(),
TextInput::make('skip_rows')
->label('Rows to skip')
->numeric()
->default(0),
]),
Wizard\Step::make('Review')
->schema([
// Preview component here
]),
]);
$this->action(function (array $data): void {
DB::transaction(function () use ($data) {
// Import logic here
});
});
$this->successNotificationTitle('Data imported successfully');
}
}