*/ public array $quickUploads = []; public function mount(?int $value = null): void { $this->value = $value; } public function openPicker(): void { $this->showModal = true; } public function selectMedia(int $id): void { $media = DisplayMedia::find($id); if (! $media) { return; } $this->value = $media->id; $this->showModal = false; $this->dispatch('display-media-selected', field: $this->field, mediaId: $media->id, url: $media->getUrl()); } public function clearSelection(): void { $this->value = null; $this->dispatch('display-media-selected', field: $this->field, mediaId: null, url: null); } public function updatedQuickUploads(): void { $this->validate([ 'quickUploads' => 'nullable|array|max:5', 'quickUploads.*' => 'file|mimes:jpeg,jpg,png,gif,webp,svg,mp4,webm,mov|max:204800', ]); $service = app(DisplayMediaService::class); $lastMedia = null; foreach ($this->quickUploads as $file) { $lastMedia = $service->storeUpload($file); } $this->quickUploads = []; if ($lastMedia) { $this->value = $lastMedia->id; $this->showModal = false; $this->dispatch('display-media-selected', field: $this->field, mediaId: $lastMedia->id, url: $lastMedia->getUrl()); } } public function removeQuickUpload(int $index): void { if (isset($this->quickUploads[$index])) { unset($this->quickUploads[$index]); $this->quickUploads = array_values($this->quickUploads); } } public function render(): View { return view('livewire.admin.cms.display-media-picker', [ 'selectedMedia' => $this->resolveSelectedMedia(), 'mediaItems' => $this->resolveMediaItems(), ]); } private function resolveSelectedMedia(): ?DisplayMedia { if (! $this->value) { return null; } return DisplayMedia::find($this->value); } /** * @return LengthAwarePaginator */ private function resolveMediaItems(): LengthAwarePaginator { return DisplayMedia::query() ->active() ->when($this->type === 'image', fn ($q) => $q->images()) ->when($this->type === 'video', fn ($q) => $q->videos()) ->when($this->search, fn ($q) => $q->search($this->search)) ->orderByDesc('created_at') ->paginate(18); } }