From e266a0f2dc312708fb5254c5edf0d84c6b8a95c0 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 9 May 2026 20:20:43 -0400 Subject: [PATCH] feat(web): wire RowActionsMenu in requests + quarantine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Requests: primary Approve, secondary [Override, Reject]. Quarantine: primary Resolve, secondary [Play, Delete file]; the Delete-via-Lidarr conditional stays inline above md (preserves the disabled-with-tooltip semantics) and hides below md to avoid crowding — the operator can still trigger it from the desktop view. Co-Authored-By: Claude Opus 4.7 (1M context) --- web/src/routes/admin/quarantine/+page.svelte | 39 +++++--------------- web/src/routes/admin/requests/+page.svelte | 36 ++++-------------- 2 files changed, 17 insertions(+), 58 deletions(-) diff --git a/web/src/routes/admin/quarantine/+page.svelte b/web/src/routes/admin/quarantine/+page.svelte index 6e369b88..e1645999 100644 --- a/web/src/routes/admin/quarantine/+page.svelte +++ b/web/src/routes/admin/quarantine/+page.svelte @@ -2,6 +2,7 @@ import { pageTitle } from '$lib/branding'; import { Music2, RotateCcw, Trash2, Cloud, Play, ChevronRight } from 'lucide-svelte'; import { useQueryClient } from '@tanstack/svelte-query'; + import RowActionsMenu, { type RowAction } from '$lib/components/RowActionsMenu.svelte'; import { createAdminQuarantineQuery, resolveQuarantine, @@ -258,41 +259,19 @@ + {@const primary: RowAction = { icon: RotateCcw, label: 'Resolve', onclick: () => onResolve(r) }} + {@const secondary: RowAction[] = [ + { icon: Play, label: 'Play', onclick: () => onPlay(r) }, + { icon: Trash2, label: 'Delete file', onclick: () => openDeleteFile(r), danger: true } + ]}
- - - - - + {#if lidarrDisabled} @@ -303,7 +282,7 @@
{#if r.status === 'pending'} -
- - - + {@const primary: RowAction = { icon: Check, label: 'Approve', onclick: () => onApprove(r) }} + {@const secondary: RowAction[] = [ + { icon: SlidersHorizontal, label: 'Override', onclick: () => openOverride(r) }, + { icon: X, label: 'Reject', onclick: () => openReject(r), danger: true } + ]} +
+
{/if}