From 04aa85833861dab266d0b1d296698856a44bc137 Mon Sep 17 00:00:00 2001 From: Leo Vasanko Date: Fri, 22 May 2026 21:20:05 +0000 Subject: [PATCH] feat(ui): refine detail navigation and cast row layout --- frontend/src/App.vue | 6 ++ frontend/src/components/Header.vue | 11 ++- frontend/src/components/MediaDetail.vue | 117 ++++++++++++++++++------ 3 files changed, 100 insertions(+), 34 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index b639910..62359b0 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -71,6 +71,7 @@ @close="closeDetail" @play="handlePlay" @open-folder="handleOpenFolder" + @search-actor="handleActorSearch" /> @@ -505,6 +506,11 @@ function closeDetail() { router.push(`/${currentView.value}`); } +function handleActorSearch(actorName: string) { + searchQuery.value = actorName; + router.push(`/${currentView.value}`); +} + // Convert raw data to MediaItem format function movieToMediaItem(movie: Movie): MediaItem { // Get resolution from first torrent if available diff --git a/frontend/src/components/Header.vue b/frontend/src/components/Header.vue index 90dfb45..35af541 100644 --- a/frontend/src/components/Header.vue +++ b/frontend/src/components/Header.vue @@ -146,14 +146,15 @@ function goToCategory() { // Handle search input focus - navigate to search if we have a query function handleSearchFocus() { - // If on detail page, go back to browse first - if (isDetailPage.value) { - goToCategory(); - } + // Intentionally no-op: focusing search should not navigate away from detail. } // Sync local search to parent -watch(localSearch, (val) => { +watch(localSearch, (val, prevVal) => { + // When user starts typing from detail page, exit detail and show search results. + if (isDetailPage.value && !prevVal && !!val.trim()) { + goToCategory(); + } emit('search', val); }); diff --git a/frontend/src/components/MediaDetail.vue b/frontend/src/components/MediaDetail.vue index 6e0a803..c643abc 100644 --- a/frontend/src/components/MediaDetail.vue +++ b/frontend/src/components/MediaDetail.vue @@ -94,31 +94,33 @@ :best="index === 0" :selectable="!!version.playable_file" :disabled="!version.playable_file" - v-bind="navAttrs(2, index)" + v-bind="navAttrs(2, index, index === 0 ? 0 : undefined)" @activate="handleVersionActivate(version, $event)" :title="version.playable_file ? 'Click to play/continue. Alt+Click to open folder.' : 'No playable file'" /> -