Add e-book fetch API and UI integration for requests

Introduces an API endpoint to trigger e-book downloads for completed requests, with admin UI integration in RecentRequestsTable and RequestActionsDropdown. Updates the admin dashboard to detect e-book sidecar feature availability from settings. Enhances torrent search result handling with info URLs, improves ranking algorithm normalization, and refines interactive search to show all results without threshold filtering. Also allows nullable ratings in request schemas.
This commit is contained in:
kikootwo
2026-01-08 02:09:57 -05:00
parent 95c25ff73a
commit 722a78ac33
10 changed files with 342 additions and 57 deletions
+22 -3
View File
@@ -5,15 +5,15 @@
'use client';
import { useEffect } from 'react';
import useSWR from 'swr';
import Link from 'next/link';
import { authenticatedFetcher } from '@/lib/utils/api';
import { MetricCard } from './components/MetricCard';
import { ActiveDownloadsTable } from './components/ActiveDownloadsTable';
import { RecentRequestsTable } from './components/RecentRequestsTable';
import { ToastProvider } from '@/components/ui/Toast';
export default function AdminDashboard() {
function AdminDashboardContent() {
// Fetch data with auto-refresh every 10 seconds
const { data: metrics, error: metricsError } = useSWR(
'/api/admin/metrics',
@@ -39,6 +39,14 @@ export default function AdminDashboard() {
}
);
const { data: settingsData } = useSWR(
'/api/admin/settings',
authenticatedFetcher,
{
refreshInterval: 60000, // Settings change infrequently
}
);
const isLoading = !metrics || !downloadsData || !requestsData;
const hasError = metricsError || downloadsError || requestsError;
@@ -202,7 +210,10 @@ export default function AdminDashboard() {
<h2 className="text-xl font-bold text-gray-900 dark:text-gray-100 mb-4">
Recent Requests
</h2>
<RecentRequestsTable requests={requestsData.requests} />
<RecentRequestsTable
requests={requestsData.requests}
ebookSidecarEnabled={settingsData?.ebook?.enabled || false}
/>
</div>
{/* Quick Actions */}
@@ -298,3 +309,11 @@ export default function AdminDashboard() {
</div>
);
}
export default function AdminDashboard() {
return (
<ToastProvider>
<AdminDashboardContent />
</ToastProvider>
);
}