The Button component only accepts: 'primary' | 'secondary' | 'outline' | 'danger' | 'success'. Changed 'default' to 'primary' as the closest equivalent. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
153 lines
5.5 KiB
TypeScript
153 lines
5.5 KiB
TypeScript
"use client";
|
||
import { useState } from "react";
|
||
import { useAuth } from "@/contexts/AuthContext";
|
||
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/Card";
|
||
import Button from "@/components/Button";
|
||
import { useRouter } from "next/navigation";
|
||
import { ROUTES } from "@/utils/constants";
|
||
|
||
export default function TestTicketsPage() {
|
||
const { user, isAuthenticated } = useAuth();
|
||
const router = useRouter();
|
||
const [testCode, setTestCode] = useState("");
|
||
|
||
const generateTestCode = () => {
|
||
const code = `TTP${Date.now().toString().slice(-7)}`;
|
||
setTestCode(code);
|
||
return code;
|
||
};
|
||
|
||
const scenarios = [
|
||
{
|
||
title: "Scénario 1 : Nouveau ticket",
|
||
description: "Génère un nouveau code unique que vous pouvez utiliser",
|
||
action: "Générer un code",
|
||
buttonVariant: "primary" as const,
|
||
onClick: () => {
|
||
const code = generateTestCode();
|
||
alert(`Code généré : ${code}\n\nCopiez ce code et utilisez-le sur la page /jeux`);
|
||
}
|
||
},
|
||
{
|
||
title: "Scénario 2 : Vérifier mes tickets",
|
||
description: "Voir tous vos tickets déjà utilisés",
|
||
action: "Aller sur Mes lots",
|
||
buttonVariant: "outline" as const,
|
||
onClick: () => router.push(ROUTES.MY_LOTS)
|
||
},
|
||
{
|
||
title: "Scénario 3 : Diagnostic",
|
||
description: "Tester l'API et voir les détails techniques",
|
||
action: "Ouvrir le diagnostic",
|
||
buttonVariant: "outline" as const,
|
||
onClick: () => router.push('/mes-lots/debug')
|
||
},
|
||
];
|
||
|
||
if (!isAuthenticated) {
|
||
return (
|
||
<div className="min-h-[calc(100vh-8rem)] flex items-center justify-center">
|
||
<Card className="max-w-md text-center">
|
||
<CardContent className="py-8">
|
||
<h2 className="text-2xl font-bold text-gray-900 mb-4">
|
||
Connexion requise
|
||
</h2>
|
||
<p className="text-gray-600 mb-6">
|
||
Vous devez être connecté pour accéder à cette page
|
||
</p>
|
||
<Button onClick={() => router.push(ROUTES.LOGIN)}>
|
||
Se connecter
|
||
</Button>
|
||
</CardContent>
|
||
</Card>
|
||
</div>
|
||
);
|
||
}
|
||
|
||
return (
|
||
<div className="py-8">
|
||
<div className="max-w-4xl mx-auto">
|
||
<Card className="mb-6">
|
||
<CardHeader>
|
||
<CardTitle>🧪 Page de test - Tickets</CardTitle>
|
||
</CardHeader>
|
||
<CardContent>
|
||
<div className="p-4 bg-blue-50 rounded border border-blue-200 mb-6">
|
||
<p className="text-sm text-blue-800">
|
||
<strong>👤 Connecté en tant que :</strong> {user?.firstName} {user?.lastName} ({user?.email})
|
||
</p>
|
||
<p className="text-sm text-blue-800">
|
||
<strong>🎭 Rôle :</strong> {user?.role}
|
||
</p>
|
||
</div>
|
||
|
||
{testCode && (
|
||
<div className="p-4 bg-green-50 rounded border border-green-200 mb-6">
|
||
<p className="text-sm text-green-800 mb-2">
|
||
<strong>✅ Code généré :</strong>
|
||
</p>
|
||
<div className="flex items-center gap-3">
|
||
<code className="text-2xl font-mono font-bold bg-white px-4 py-2 rounded border-2 border-green-300">
|
||
{testCode}
|
||
</code>
|
||
<Button
|
||
variant="outline"
|
||
size="sm"
|
||
onClick={() => {
|
||
navigator.clipboard.writeText(testCode);
|
||
alert('Code copié !');
|
||
}}
|
||
>
|
||
📋 Copier
|
||
</Button>
|
||
<Button
|
||
size="sm"
|
||
onClick={() => router.push(ROUTES.GAME)}
|
||
>
|
||
→ Aller jouer
|
||
</Button>
|
||
</div>
|
||
</div>
|
||
)}
|
||
|
||
<div className="space-y-4">
|
||
{scenarios.map((scenario, index) => (
|
||
<Card key={index}>
|
||
<CardContent className="pt-6">
|
||
<div className="flex items-start justify-between">
|
||
<div className="flex-1">
|
||
<h3 className="font-semibold text-lg mb-2">
|
||
{scenario.title}
|
||
</h3>
|
||
<p className="text-sm text-gray-600 mb-3">
|
||
{scenario.description}
|
||
</p>
|
||
</div>
|
||
<Button
|
||
variant={scenario.buttonVariant}
|
||
onClick={scenario.onClick}
|
||
>
|
||
{scenario.action}
|
||
</Button>
|
||
</div>
|
||
</CardContent>
|
||
</Card>
|
||
))}
|
||
</div>
|
||
|
||
<div className="mt-6 p-4 bg-yellow-50 rounded border border-yellow-200">
|
||
<h3 className="font-semibold mb-2">⚠️ Important :</h3>
|
||
<ul className="text-sm space-y-1 list-disc list-inside text-yellow-800">
|
||
<li>Les codes générés ici sont des codes de TEST</li>
|
||
<li>Ils ne seront valides QUE si votre backend accepte de créer des tickets à la volée</li>
|
||
<li>Si le backend vérifie que le code existe en base, créez d'abord des tickets via SQL</li>
|
||
<li>Consultez le fichier <code className="bg-yellow-100 px-1">docs/create-test-tickets.sql</code></li>
|
||
</ul>
|
||
</div>
|
||
</CardContent>
|
||
</Card>
|
||
</div>
|
||
</div>
|
||
);
|
||
}
|