From e5e84c49c9ca090b740877784ac5ddb9e4cc9014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrei=20Ioni=C8=9B=C4=83?= Date: Wed, 18 Oct 2023 17:06:26 +0100 Subject: [PATCH] wip --- .../Resources/Project/EditProjectResource.php | 5 +- app/Models/Project.php | 8 +- app/Services/ProjectService.php | 8 +- resources/js/Components/Field.vue | 8 +- resources/js/Components/cards/ProjectCard.vue | 53 +-- .../Pages/AdminOng/Projects/EditProject.vue | 357 +++++++++++------- 6 files changed, 252 insertions(+), 187 deletions(-) diff --git a/app/Http/Resources/Project/EditProjectResource.php b/app/Http/Resources/Project/EditProjectResource.php index 5bfc1ebc..0e830cef 100644 --- a/app/Http/Resources/Project/EditProjectResource.php +++ b/app/Http/Resources/Project/EditProjectResource.php @@ -6,6 +6,7 @@ use App\Http\Resources\Resource; use Illuminate\Http\Request; +use Spatie\MediaLibrary\MediaCollections\Models\Media; class EditProjectResource extends Resource { @@ -20,10 +21,10 @@ public function toArray(Request $request): array 'image' => $this->getFirstMediaUrl('preview'), 'target_budget' => $this->target_budget, - 'gallery' => $this->getMedia('gallery')->map(function ($media) { + 'gallery' => $this->getMedia('gallery')->map(function (Media $media) { return [ 'id' => $media->id, - 'url' => $media->getFullUrl(), + 'url' => $media->getFullUrl('preview'), ]; })->toArray(), 'organization' => [ diff --git a/app/Models/Project.php b/app/Models/Project.php index f16a8ae7..e06b3b94 100644 --- a/app/Models/Project.php +++ b/app/Models/Project.php @@ -86,7 +86,13 @@ public function registerMediaCollections(): void ->nonQueued(); }); - $this->addMediaCollection('gallery'); + $this->addMediaCollection('gallery') + ->registerMediaConversions(function (Media $media) { + $this + ->addMediaConversion('preview') + ->fit(Manipulations::FIT_CONTAIN, 300, 300) + ->nonQueued(); + }); } public function getActivitylogOptions(): LogOptions diff --git a/app/Services/ProjectService.php b/app/Services/ProjectService.php index 014b6884..dc3d343a 100644 --- a/app/Services/ProjectService.php +++ b/app/Services/ProjectService.php @@ -31,12 +31,14 @@ private static function updateGallery(Project $project, ?array $value): void $mediaIds = collect($value) ->filter(fn ($item) => \is_array($item)) ->pluck('id'); + $project->getMedia('gallery') ->map(function (Media $media) use ($mediaIds) { if (! $mediaIds->contains($media->id)) { $media->delete(); } }); + collect($value)->filter(fn ($image) => ! \is_array($image)) ->map(fn ($image) => $project->addMedia($image)->toMediaCollection('gallery')); } @@ -45,17 +47,21 @@ public function create(array $data): Project|RegionalProject { $data['organization_id'] = auth()->user()->organization_id; $data['status'] = ProjectStatus::draft->value; -// dd($data); + $project = $this->createDraftProject($data); + if (! empty($data['categories'])) { $project->categories()->attach($data['categories']); } + if (! empty($data['counties'])) { $project->counties()->attach($data['counties']); } + if (! empty($data['preview'])) { $project->addMedia($data['preview'])->toMediaCollection('preview'); } + if (! empty($data['gallery'])) { collect($data['gallery'])->map(function ($image) use ($project) { $project->addMedia($image)->toMediaCollection('gallery'); diff --git a/resources/js/Components/Field.vue b/resources/js/Components/Field.vue index cf8afe2e..fbe44404 100644 --- a/resources/js/Components/Field.vue +++ b/resources/js/Components/Field.vue @@ -21,12 +21,12 @@
-