mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
libraryItem tagging added
This commit is contained in:
@@ -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(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,7 +71,28 @@
|
||||
/>
|
||||
</x-input.group>
|
||||
|
||||
@if($libraryItem->lecturer_id && $libraryItem->type && $library)
|
||||
<x-input.group :for="md5('selectedTags')" :label="__('Tags')">
|
||||
<div class="py-2 flex flex-wrap items-center space-x-1">
|
||||
@foreach($tags as $tag)
|
||||
<div class="cursor-pointer" wire:key="tag{{ $loop->index }}"
|
||||
wire:click="selectTag('{{ $tag->name }}')">
|
||||
@if(collect($selectedTags)->contains($tag->name))
|
||||
<x-badge
|
||||
amber>
|
||||
{{ $tag->name }}
|
||||
</x-badge>
|
||||
@else
|
||||
<x-badge
|
||||
black>
|
||||
{{ $tag->name }}
|
||||
</x-badge>
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
</x-input.group>
|
||||
|
||||
@if($libraryItem->lecturer_id && $libraryItem->type && $library && count($selectedTags) > 0)
|
||||
<x-input.group :for=" md5('image')" :label="__('Main picture')">
|
||||
<div class="py-4">
|
||||
@if ($image)
|
||||
|
||||
Reference in New Issue
Block a user