From dc1edcde08a52c35913bbadece2fcb877ee8363f Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Sat, 11 Feb 2023 20:25:39 +0100 Subject: [PATCH] libraryItem tagging added --- .../Livewire/Library/Form/LibraryItemForm.php | 31 ++++++++++++++++++- .../library/form/library-item-form.blade.php | 23 +++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/app/Http/Livewire/Library/Form/LibraryItemForm.php b/app/Http/Livewire/Library/Form/LibraryItemForm.php index 9a2357f2..e13f8b7f 100644 --- a/app/Http/Livewire/Library/Form/LibraryItemForm.php +++ b/app/Http/Livewire/Library/Form/LibraryItemForm.php @@ -6,6 +6,7 @@ use App\Enums\LibraryItemType; use App\Models\Country; use App\Models\Library; use App\Models\LibraryItem; +use App\Models\Tag; use Illuminate\Validation\Rule; use Livewire\Component; use Livewire\WithFileUploads; @@ -21,6 +22,7 @@ class LibraryItemForm extends Component public $library; public $image; public $file; + public array $selectedTags = []; public bool $lecturer = false; public ?string $fromUrl = ''; @@ -37,6 +39,8 @@ class LibraryItemForm extends Component 'library' => 'required', + 'selectedTags' => 'array|min:1', + 'libraryItem.lecturer_id' => 'required', 'libraryItem.name' => 'required', 'libraryItem.type' => 'required', @@ -66,9 +70,14 @@ class LibraryItemForm extends Component ]); if ($this->lecturer) { $this->library = Library::query() - ->firstWhere('name', '=', 'Dozentenmaterial')?->id; + ->firstWhere('name', '=', 'Dozentenmaterial')?->id; } } else { + $this->selectedTags = $this->libraryItem->tags() + ->where('type', 'library_item') + ->get() + ->map(fn($tag) => $tag->name) + ->toArray(); $this->library = $this->libraryItem->libraries() ->first() ->id; @@ -84,6 +93,11 @@ class LibraryItemForm extends Component $this->libraryItem->save(); $this->libraryItem->setStatus('published'); + $this->libraryItem->syncTagsWithType( + $this->selectedTags, + 'library_item' + ); + if ($this->image) { $this->libraryItem->addMedia($this->image) ->toMediaCollection('main'); @@ -100,6 +114,18 @@ class LibraryItemForm extends Component return to_route('library.table.libraryItems', ['country' => $this->country]); } + public function selectTag($name) + { + $selectedTags = collect($this->selectedTags); + if ($selectedTags->contains($name)) { + $selectedTags = $selectedTags->filter(fn($tag) => $tag !== $name); + } else { + $selectedTags->push($name); + } + $this->selectedTags = $selectedTags->values() + ->toArray(); + } + public function render() { return view('livewire.library.form.library-item-form', [ @@ -117,6 +143,9 @@ class LibraryItemForm extends Component 'name' => $library->name, ]) ->toArray(), + 'tags' => Tag::query() + ->where('type', 'library_item') + ->get(), ]); } } diff --git a/resources/views/livewire/library/form/library-item-form.blade.php b/resources/views/livewire/library/form/library-item-form.blade.php index 8a755fe8..8752d931 100644 --- a/resources/views/livewire/library/form/library-item-form.blade.php +++ b/resources/views/livewire/library/form/library-item-form.blade.php @@ -71,7 +71,28 @@ /> - @if($libraryItem->lecturer_id && $libraryItem->type && $library) + +
+ @foreach($tags as $tag) +
+ @if(collect($selectedTags)->contains($tag->name)) + + {{ $tag->name }} + + @else + + {{ $tag->name }} + + @endif +
+ @endforeach +
+
+ + @if($libraryItem->lecturer_id && $libraryItem->type && $library && count($selectedTags) > 0)
@if ($image)