From a799704a4a4d1fd319729d8e556983aae292b7f5 Mon Sep 17 00:00:00 2001 From: Lupu Gheorghe Date: Tue, 17 Oct 2023 18:22:34 +0300 Subject: [PATCH] fix edit gallery on edit --- app/Services/ProjectService.php | 20 ++++++++++++++++++- .../Pages/AdminOng/Projects/EditProject.vue | 18 ++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/app/Services/ProjectService.php b/app/Services/ProjectService.php index a9eb2b0f..014b6884 100644 --- a/app/Services/ProjectService.php +++ b/app/Services/ProjectService.php @@ -12,6 +12,7 @@ use App\Notifications\Admin\ProjectCreated as ProjectCreatedAdmin; use App\Notifications\Ngo\ProjectCreated; use Illuminate\Support\Facades\Notification; +use Spatie\MediaLibrary\MediaCollections\Models\Media; class ProjectService { @@ -25,6 +26,21 @@ public function __construct($projectClass = null) } } + 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')); + } + public function create(array $data): Project|RegionalProject { $data['organization_id'] = auth()->user()->organization_id; @@ -103,11 +119,13 @@ public static function update(Project $project, array $attributes) $key = $attributes->keys()->first(); $value = $attributes->get($key); +// dd($attributes,$value); + return match ($key) { 'counties' => $project->counties()->sync($value), 'categories' => $project->categories()->sync($value), 'image' => $project->addMedia($value)->toMediaCollection('preview'), - 'gallery' => collect($value)->map(fn ($image) => $project->addMedia($image)->toMediaCollection('gallery')), + 'gallery' => self::updateGallery($project, $value), default => ($project->status === ProjectStatus::approved && \in_array($key, $project->requiresApproval)) ? $project->fill($attributes->all())->saveForApproval() diff --git a/resources/js/Pages/AdminOng/Projects/EditProject.vue b/resources/js/Pages/AdminOng/Projects/EditProject.vue index 93f266a4..418e7f18 100644 --- a/resources/js/Pages/AdminOng/Projects/EditProject.vue +++ b/resources/js/Pages/AdminOng/Projects/EditProject.vue @@ -355,7 +355,23 @@ - + + +