import { useState } from 'react';
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { Link, useSearchParams } from 'react-router-dom';
import { api } from '@/api/client';
import type { AdminProject, AdminUser } from '@/api/types';
import { useAuth, humanMessage } from '@/auth/AuthProvider';
/**
* Administration hors projet.
*
* Volontairement séparée des écrans Membres et Intégration, qui répondent à
* « qui a accès à CE projet ? ». Ici la question est autre : « qui existe dans
* l'outil, et où va-t-il ? ». Elle traverse les projets, donc elle traverse
* aussi les administrateurs de projet — d'où le rôle super-administrateur.
*
* Deux onglets, pas davantage. Un panneau d'administration qui grossit sans
* discipline devient l'endroit où l'on range ce qu'on ne sait pas classer.
*/
export function AdminPage() {
const { user } = useAuth();
const [params, setParams] = useSearchParams();
const tab = params.get('tab') === 'projects' ? 'projects' : 'users';
if (user && !user.isSuperAdmin) {
return ;
}
return (
Cette page donne accès aux comptes de toute l'organisation. Pour gérer les accès
d'un projet dont vous êtes administrateur, ouvrez ce projet et allez dans
« Membres ».
setSearch(e.target.value)}
placeholder="Rechercher un nom ou une adresse…"
className="min-w-64 flex-1 rounded-md border border-ink-300 px-3 py-2 text-sm outline-none focus:border-accent"
/>
{users.length} compte{users.length > 1 ? 's' : ''}
{/* Un compte sans projet ne voit rien du tout. C'est soit une
invitation oubliée, soit un départ mal soldé — dans les deux cas
quelque chose à traiter, pas une curiosité. */}
{orphans > 0 && (
{orphans} compte{orphans > 1 ? 's' : ''} sans aucun projet : ces personnes se
connectent mais ne voient rien.
{project.name}
{project.slug}
{/* Un projet sans propriétaire n'est administrable par personne :
plus d'invitation possible, plus de publication. C'est la
seule anomalie que cet écran doit crier. */}
{project.owners.length === 0 && (
aucun propriétaire
)}
{/* Sans plateforme, aucune clé ne peut être rattachée et aucun
bundle ne peut être construit : le projet existe mais ne
livre rien. Un projet fraîchement créé est dans cet état. */}
{project.platformCount === 0 && (
aucune plateforme
)}
Membres
Intégration