diff --git a/src/Handlers/ExportHandler.php b/src/Handlers/ExportHandler.php index 78a5d8201..524ab17f4 100644 --- a/src/Handlers/ExportHandler.php +++ b/src/Handlers/ExportHandler.php @@ -6,6 +6,7 @@ use Closure; use Generator; +use Illuminate\Support\Str; use Illuminate\Support\Facades\Storage; use MoonShine\Contracts\Resources\ResourceContract; use MoonShine\Exceptions\ActionException; @@ -70,6 +71,11 @@ public function filename(string $filename): static return $this; } + private function getFilename(): ?string + { + return $this->hasFilename() ? $this->filename : $this->getDefaultFilename(); + } + /** * @param array|Closure(static $ctx): array $ids */ @@ -155,12 +161,17 @@ public function getDelimiter(): string private function generateFilePath(): string { $dir = $this->getDir(); - $filename = $this->hasFilename() ? $this->filename : $this->getResource()->uriKey(); + $filename = $this->getFilename(); $ext = $this->isCsv() ? 'csv' : 'xlsx'; return sprintf('%s/%s.%s', $dir, $filename, $ext); } + private function getDefaultFilename(): string + { + return $this->getResource()->uriKey() . '-' . Str::uuid(); + } + /** * @throws WriterNotOpenedException * @throws IOException diff --git a/tests/Fixtures/Resources/TestImageResource.php b/tests/Fixtures/Resources/TestImageResource.php index 102f37459..03fa32b72 100644 --- a/tests/Fixtures/Resources/TestImageResource.php +++ b/tests/Fixtures/Resources/TestImageResource.php @@ -4,6 +4,7 @@ namespace MoonShine\Tests\Fixtures\Resources; +use MoonShine\Handlers\ExportHandler; use Illuminate\Database\Eloquent\Model; use MoonShine\Fields\ID; use MoonShine\Fields\Image; @@ -33,4 +34,11 @@ public function rules(Model $item): array { return []; } + + public function export(): ?ExportHandler + { + return ExportHandler::make(__('moonshine::ui.export')) + ->csv() + ->filename($this->uriKey()); + } } diff --git a/tests/Fixtures/Resources/TestResource.php b/tests/Fixtures/Resources/TestResource.php index 7baae8dcf..045bfa0ba 100644 --- a/tests/Fixtures/Resources/TestResource.php +++ b/tests/Fixtures/Resources/TestResource.php @@ -5,6 +5,7 @@ namespace MoonShine\Tests\Fixtures\Resources; use Closure; +use MoonShine\Handlers\ExportHandler; use Illuminate\Database\Eloquent\Model; use MoonShine\Resources\ModelResource; @@ -220,4 +221,11 @@ public function setDeleteRelationships(): void { $this->deleteRelationships = true; } + + public function export(): ?ExportHandler + { + return ExportHandler::make(__('moonshine::ui.export')) + ->csv() + ->filename($this->uriKey()); + } }