/** * Licenses Tab Component * * Manages user licenses within the organization */ 'use client'; import { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { getSubscriptionOverview } from '@/lib/api/subscriptions'; import Link from 'next/link'; import { UserPlus } from 'lucide-react'; export default function LicensesTab() { const [error, setError] = useState(''); const [success, setSuccess] = useState(''); const { data: subscription, isLoading } = useQuery({ queryKey: ['subscription'], queryFn: getSubscriptionOverview, }); if (isLoading) { return (
); } const licenses = subscription?.licenses || []; const activeLicenses = licenses.filter((l) => l.status === 'ACTIVE'); const revokedLicenses = licenses.filter((l) => l.status === 'REVOKED'); const usagePercentage = subscription ? subscription.maxLicenses === -1 ? 0 : (subscription.usedLicenses / subscription.maxLicenses) * 100 : 0; return (
{/* Alerts */} {error && (
{error}
)} {success && (
{success}
)} {/* License Summary */}

Résumé des licences

Licences utilisées

{subscription?.usedLicenses || 0}

Hors ADMIN (illimité)

Licences disponibles

{subscription?.availableLicenses === -1 ? 'Illimité' : subscription?.availableLicenses || 0}

Licences totales

{subscription?.maxLicenses === -1 ? 'Illimité' : subscription?.maxLicenses || 0}

{/* Usage Bar */} {subscription && subscription.maxLicenses !== -1 && (
Utilisation {Math.round(usagePercentage)}%
= 90 ? 'bg-red-600' : usagePercentage >= 70 ? 'bg-yellow-500' : 'bg-blue-600' }`} style={{ width: `${Math.min(usagePercentage, 100)}%` }} >
)}
{/* Active Licenses */}

Licences actives ({activeLicenses.length})

Inviter un utilisateur
{activeLicenses.length === 0 ? (
Aucune licence active
) : (
{activeLicenses.map((license) => { const isAdmin = license.userRole === 'ADMIN'; return ( ); })}
Utilisateur Email Rôle Assignée le Licence
{license.userName}
{license.userEmail}
{license.userRole}
{new Date(license.assignedAt).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric', })}
{isAdmin ? ( Illimité ) : ( Active )}
)}
{/* Revoked Licenses (History) */} {revokedLicenses.length > 0 && (

Historique des licences révoquées ({revokedLicenses.length})

{revokedLicenses.map((license) => ( ))}
Utilisateur Email Rôle Assignée le Révoquée le Statut
{license.userName}
{license.userEmail}
{license.userRole}
{new Date(license.assignedAt).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric', })}
{license.revokedAt ? new Date(license.revokedAt).toLocaleDateString('fr-FR', { day: 'numeric', month: 'long', year: 'numeric', }) : '-'}
Révoquée
)} {/* Info Box */}

Comment fonctionnent les licences ?

  • Chaque utilisateur actif de votre organisation consomme une licence
  • Les licences sont automatiquement assignées lors de l'ajout d'un utilisateur
  • Les licences sont libérées lorsqu'un utilisateur est désactivé ou supprimé
  • Pour ajouter plus d'utilisateurs, passez à un plan supérieur dans l'onglet Abonnement
); }