Display Module 13-05-2026

This commit is contained in:
Kevin Adametz 2026-05-13 14:34:08 +02:00
parent 6a65354f4c
commit 9262132325
41 changed files with 496 additions and 334 deletions

View file

@ -44,7 +44,7 @@ class DisplayList extends Component
], true) ? $playlistStatus : DisplayPlaylist::STATUS_PUBLISHED;
if ($id) {
$display = Display::with(['livePlaylist.modules', 'draftPlaylist.modules', 'versions'])->findOrFail($id);
$display = Display::with(['livePlaylist.modules', 'draftPlaylist.modules'])->findOrFail($id);
$this->displayId = $display->id;
$this->displayName = $display->name;
$this->displayLocation = $display->location ?? '';
@ -137,7 +137,6 @@ class DisplayList extends Component
$this->previewFrameRefreshCounter++;
} else {
$this->syncPublishedPlaylist($display);
$this->syncLegacyPivot($display, $this->selectedVersionIds);
}
$this->closeModal();
@ -202,24 +201,9 @@ class DisplayList extends Component
return $display->draftPlaylist->fresh('modules');
});
$this->syncLegacyPivot($display, $this->moduleIdsForPlaylist($publishedPlaylist));
session()->flash('success', 'Entwurf wurde veröffentlicht.');
}
/**
* @param array<int> $versionIds
*/
private function syncLegacyPivot(Display $display, array $versionIds): void
{
$syncData = [];
foreach ($versionIds as $sortOrder => $versionId) {
$syncData[$versionId] = ['sort_order' => $sortOrder];
}
$display->versions()->sync($syncData);
}
private function syncPublishedPlaylist(Display $display): void
{
$playlist = $display->playlists()->firstOrCreate(
@ -297,8 +281,7 @@ class DisplayList extends Component
return $this->moduleIdsForPlaylist($display->draftPlaylist);
}
return $this->moduleIdsForPlaylist($display->livePlaylist)
?: $display->versions->pluck('id')->all();
return $this->moduleIdsForPlaylist($display->livePlaylist);
}
public function deleteDisplay(int $id): void

View file

@ -5,6 +5,7 @@ namespace App\Livewire\Admin\Cms;
use App\Enums\DisplayVersionType;
use App\Models\DisplayVersion;
use App\Models\DisplayVersionItem;
use App\Support\DisplayModuleSettings;
use Illuminate\Support\Facades\File;
use Livewire\Attributes\On;
use Livewire\Component;
@ -480,46 +481,7 @@ class DisplayVersionEditor extends Component
*/
private function settingsWithDefaults(): array
{
return array_replace_recursive($this->defaultSettings(), $this->version->settings ?? []);
}
/**
* @return array<string, mixed>
*/
private function defaultSettings(): array
{
return match ($this->version->type) {
DisplayVersionType::VideoDisplay => [
'qr_label' => 'Website',
],
DisplayVersionType::B2in => [
'theme' => 'dark',
'header_logo_url' => '../assets/b2in-logo-positive.svg',
'header_claim' => 'Connecting Design & Property',
'footer_url' => 'B2in.eu',
'footer_name' => '',
'footer_prefix' => 'by',
'qr_url' => '',
'transition' => [
'type' => 'crossfade',
'duration_ms' => 800,
],
'default_image_duration' => 10,
],
DisplayVersionType::Offers => [
'loop' => true,
'logo_url' => '../logo-cabinet-300.png',
'brand_text' => 'Bielefeld',
'footer_claim' => '',
'footer_url' => '',
'qr_default_title' => 'Kontakt',
'qr_subtitle' => 'QR scannen',
'transition' => [
'type' => 'fade',
'duration' => 600,
],
],
};
return DisplayModuleSettings::merge($this->version->type, $this->version->settings);
}
public function render()

View file

@ -4,6 +4,8 @@ namespace App\Livewire\Admin\Cms;
use App\Enums\DisplayVersionType;
use App\Models\DisplayVersion;
use App\Support\DisplayModuleSettings;
use Illuminate\Support\Facades\DB;
use Livewire\Component;
class DisplayVersionList extends Component
@ -70,40 +72,17 @@ class DisplayVersionList extends Component
*/
private function defaultSettingsForType(string $type): array
{
return match ($type) {
'b2in' => [
'theme' => 'dark',
'header_logo_url' => '../assets/b2in-logo-positive.svg',
'header_claim' => 'Connecting Design & Property',
'footer_name' => '',
'footer_url' => 'B2in.eu',
'footer_prefix' => 'by',
'qr_url' => '',
'transition' => ['type' => 'crossfade', 'duration_ms' => 800],
'default_image_duration' => 10,
'rotation_weights' => ['immobilien' => 70, 'moebel' => 30],
'display_active' => true,
],
'offers' => [
'loop' => true,
'logo_url' => '../logo-cabinet-300.png',
'brand_text' => 'Bielefeld',
'footer_claim' => '',
'footer_url' => '',
'qr_default_title' => 'Kontakt',
'qr_subtitle' => 'QR scannen',
'transition' => ['type' => 'fade', 'duration' => 600],
],
'video-display' => [
'qr_label' => 'Website',
],
default => [],
};
return DisplayModuleSettings::defaults($type);
}
public function render()
{
$versions = DisplayVersion::withCount(['items', 'displays'])
$versions = DisplayVersion::withCount([
'items',
'playlistItems as displays_count' => fn ($query) => $query
->join('display_playlists', 'display_playlist_items.display_playlist_id', '=', 'display_playlists.id')
->select(DB::raw('count(distinct display_playlists.display_id)')),
])
->orderBy('name')
->get();

View file

@ -17,7 +17,7 @@ class MediaLibraryUploader extends Component
{
$this->validate([
'uploads' => 'nullable|array|max:20',
'uploads.*' => 'file|mimes:jpeg,jpg,png,gif,webp,svg,pdf,doc,docx|max:10240',
'uploads.*' => 'file|mimes:jpeg,jpg,png,gif,webp,svg,pdf,doc,docx|max:204800',
]);
$service = app(MediaConversionService::class);

View file

@ -73,7 +73,7 @@ class MediaPicker extends Component
{
$this->validate([
'quickUploads' => 'nullable|array|max:5',
'quickUploads.*' => 'file|mimes:jpeg,jpg,png,gif,webp,svg,pdf,doc,docx|max:10240',
'quickUploads.*' => 'file|mimes:jpeg,jpg,png,gif,webp,svg,pdf,doc,docx|max:204800',
]);
$service = app(MediaConversionService::class);