feat(frontend): library page, components, and schedule/add-to-block dialogs (tasks 11-14)

This commit is contained in:
2026-03-20 00:35:40 +01:00
parent 49c7f7abd7
commit 91271bd83c
8 changed files with 591 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
"use client";
import { useLibrarySyncStatus } from "@/hooks/use-library-sync";
export function SyncStatusBar() {
const { data: statuses } = useLibrarySyncStatus();
if (!statuses || statuses.length === 0) return null;
return (
<div className="border-b border-zinc-800 bg-zinc-900 px-6 py-1.5">
<div className="flex flex-wrap gap-4">
{statuses.map(s => (
<span key={s.id} className="text-xs text-zinc-500">
{s.provider_id}:{" "}
{s.status === "running" ? (
<span className="text-yellow-400">syncing</span>
) : s.status === "error" ? (
<span className="text-red-400">error</span>
) : (
<span className="text-zinc-400">
{s.items_found.toLocaleString()} items
{s.finished_at ? ` · synced ${new Date(s.finished_at).toLocaleTimeString()}` : ""}
</span>
)}
</span>
))}
</div>
</div>
);
}