Files
stripstream-librarian/apps/backoffice/app/layout.tsx
Froidefond Julien 9134b0dac2 feat(ui): JobsIndicator moderne avec loader et popin détaillée
- Spinner animé visible quand jobs en cours (avec pulse)
- Badge avec compteur de jobs actifs
- Popin moderne au clic avec:
  - Header avec titre et lien View All
  - Barre de progression globale
  - Liste détaillée des jobs (status, type, %)
  - Fichier en cours de traitement
  - Mini-stats (indexed, errors)
  - Footer avec info auto-refresh
- CSS complet avec animations et dark mode
- Suppression JobsIndicatorWrapper obsolète
- Mise à jour layout.tsx pour nouvelle API
2026-03-06 12:22:56 +01:00

47 lines
1.6 KiB
TypeScript

import type { Metadata } from "next";
import Image from "next/image";
import Link from "next/link";
import type { ReactNode } from "react";
import "./globals.css";
import { ThemeProvider } from "./theme-provider";
import { ThemeToggle } from "./theme-toggle";
import { JobsIndicator } from "./components/JobsIndicator";
export const metadata: Metadata = {
title: "Stripstream Backoffice",
description: "Backoffice administration for Stripstream Librarian"
};
export default function RootLayout({ children }: { children: ReactNode }) {
const apiBaseUrl = process.env.API_BASE_URL || "http://api:8080";
const apiToken = process.env.API_BOOTSTRAP_TOKEN || "";
return (
<html lang="en" suppressHydrationWarning>
<body>
<ThemeProvider>
<nav className="top-nav">
<Link href="/" className="brand">
<Image src="/logo.png" alt="Stripstream" width={36} height={36} />
<span className="brand-name">StripStream</span>
<span className="brand-subtitle">backoffice</span>
</Link>
<div className="links-wrap">
<div className="links">
<Link href="/">Dashboard</Link>
<Link href="/books">Books</Link>
<Link href="/libraries">Libraries</Link>
<Link href="/jobs">Jobs</Link>
<Link href="/tokens">Tokens</Link>
</div>
<JobsIndicator />
<ThemeToggle />
</div>
</nav>
<main>{children}</main>
</ThemeProvider>
</body>
</html>
);
}