SPB Git

spb/trouve-ka Public

Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com

Python 76.8% TypeScript 15.7% SQL 3.9% Shell 1.4% CSS 1.3% Dockerfile 0.7%
1.4 KB · 57 lines tsx
Raw Blame History
1/**2 * Trouve-KA — page admin (porte à jeton + dashboard)3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 */67"use client";89import { useCallback, useEffect, useState } from "react";10import { AdminDashboard } from "@/components/admin/dashboard";11import { TokenForm } from "@/components/admin/token-form";12import { ADMIN_TOKEN_KEY } from "@/lib/admin";1314export default function AdminPage() {15  // undefined = lecture de sessionStorage en cours; null = pas de jeton.16  const [token, setToken] = useState<string | null | undefined>(undefined);17  const [expired, setExpired] = useState(false);1819  useEffect(() => {20    setToken(sessionStorage.getItem(ADMIN_TOKEN_KEY));21  }, []);2223  const handleUnauthorized = useCallback(() => {24    sessionStorage.removeItem(ADMIN_TOKEN_KEY);25    setExpired(true);26    setToken(null);27  }, []);2829  const handleToken = useCallback((value: string) => {30    sessionStorage.setItem(ADMIN_TOKEN_KEY, value);31    setExpired(false);32    setToken(value);33  }, []);3435  const handleLogout = useCallback(() => {36    sessionStorage.removeItem(ADMIN_TOKEN_KEY);37    setExpired(false);38    setToken(null);39  }, []);4041  if (token === undefined) {42    return null;43  }4445  if (!token) {46    return <TokenForm onSubmit={handleToken} expired={expired} />;47  }4849  return (50    <AdminDashboard51      token={token}52      onUnauthorized={handleUnauthorized}53      onLogout={handleLogout}54    />55  );56}57