Laravel Nova's Queued Export As CSV Action
Installation
To install through composer, run the following command from terminal:
composer require "nova-kit/nova-queued-export-as-csv"
Usages
You can replace Laravel\Nova\Actions\ExportAsCsv
with NovaKit\NovaQueuedExportAsCsv\Actions\QueuedExportAsCsv
:
use Laravel\Nova\Actions\ExportAsCsv;
use NovaKit\NovaQueuedExportAsCsv\Actions\QueuedExportAsCsv;
/**
* Get the actions available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function actions(NovaRequest $request)
{
return [
QueuedExportAsCsv::make(),
];
}
If you would like to change the storage disk to store the CSV file that is available for download, you may invoke the withStorageDisk()
method when registering the action:
return [
QueuedExportAsCsv::make()->withStorageDisk('s3'),
];
In order to handle the stored CSV, you need to listen to NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported
event, as an example you can broadcast to Nova's Notification using the following listener class:
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Storage;
use Laravel\Nova\Notifications\NovaNotification;
use Laravel\Nova\URL;
use NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported;
class NotifyCsvExported
{
/**
* Handle the event.
*
* @param \NovaKit\NovaQueuedExportAsCsv\Events\QueuedCsvExported $event
* @return void
*/
public function handle(QueuedCsvExported $event)
{
$event->user->notify(
NovaNotification::make()
->message('Your CSV is ready to download.')
->action('Download', URL::remote(Storage::disk($event->storageDisk)->url($event->filename)))
->icon('download')
->type('info')
);
}
}