From a7f8596947a4f9112cfb34f0a41072836561f4dc Mon Sep 17 00:00:00 2001 From: dahoud Date: Fri, 31 Oct 2025 10:24:30 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Conversion=20compl=C3=A8te=20vers=20Prim?= =?UTF-8?q?eReact=20et=20corrections=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CONVERSIONS UI (8 pages): ✅ Remplacement de tous les composants Shadcn/UI par PrimeReact - Card, Button, Input, Textarea, Badge → Card, Button, InputText, InputTextarea, Tag - Conversion de toutes les icônes lucide-react en primeicons Pages converties: - app/(main)/aide/page.tsx - app/(main)/aide/documentation/page.tsx - app/(main)/aide/tutoriels/page.tsx - app/(main)/aide/support/page.tsx - app/(main)/messages/page.tsx - app/(main)/messages/nouveau/page.tsx - app/(main)/messages/envoyes/page.tsx - app/(main)/messages/archives/page.tsx CORRECTIONS BUILD: ✅ Résolution des conflits de dépendances FullCalendar - @fullcalendar/core: 6.1.4 → ^6.1.19 - Alignement avec daygrid, timegrid, interaction, react ✅ Correction des erreurs TypeScript - DataTable: Ajout de selectionMode="multiple" - InputText number: Conversion number → string avec .toString() ✅ Correction des services API (3 fichiers) - fournisseurService.ts - notificationService.ts - userService.ts - Remplacement des appels apiService.get() par axios direct - Ajout du préfixe /api/v1/ à tous les endpoints - Configuration d'interceptors pour authentication tokens RÉSULTAT: ✅ Build réussi: 126 pages générées ✅ 0 erreurs de compilation ✅ 0 erreurs TypeScript ✅ Architecture cohérente avec PrimeReact 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- app/(main)/aide/documentation/page.tsx | 57 ++-- app/(main)/aide/page.tsx | 398 ++++++++++++++----------- app/(main)/aide/support/page.tsx | 95 +++--- app/(main)/aide/tutoriels/page.tsx | 67 ++--- app/(main)/messages/archives/page.tsx | 47 ++- app/(main)/messages/envoyes/page.tsx | 47 ++- app/(main)/messages/nouveau/page.tsx | 52 ++-- app/(main)/messages/page.tsx | 89 +++--- app/(main)/stock/fournisseurs/page.tsx | 3 +- package-lock.json | 62 ++-- package.json | 2 +- services/fournisseurService.ts | 34 ++- services/notificationService.ts | 36 ++- services/userService.ts | 36 ++- 14 files changed, 550 insertions(+), 475 deletions(-) diff --git a/app/(main)/aide/documentation/page.tsx b/app/(main)/aide/documentation/page.tsx index 03b64d1..04467b5 100644 --- a/app/(main)/aide/documentation/page.tsx +++ b/app/(main)/aide/documentation/page.tsx @@ -1,18 +1,9 @@ "use client"; import React, { useState } from "react"; -import { Card } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { - BookOpen, - Search, - ChevronRight, - FileText, - Download, - ExternalLink, - ArrowLeft, -} from "lucide-react"; +import { Card } from "primereact/card"; +import { Button } from "primereact/button"; +import { InputText } from "primereact/inputtext"; import Link from "next/link"; /** @@ -112,8 +103,8 @@ export default function DocumentationPage() {
- @@ -124,8 +115,8 @@ export default function DocumentationPage() {

- @@ -133,13 +124,15 @@ export default function DocumentationPage() { {/* Barre de recherche */}
- - setSearchTerm(e.target.value)} - /> + + + setSearchTerm(e.target.value)} + /> +
{/* Résultats de recherche */} @@ -159,7 +152,7 @@ export default function DocumentationPage() {

{result.article}

{result.category}

- + ))} @@ -176,7 +169,7 @@ export default function DocumentationPage() { >
- +

{category.title}

@@ -190,20 +183,20 @@ export default function DocumentationPage() { key={index} className="flex items-center gap-2 p-2 hover:bg-gray-50 rounded cursor-pointer group" > - + {article} - +
))}
))} @@ -213,7 +206,7 @@ export default function DocumentationPage() {
- +

@@ -226,10 +219,10 @@ export default function DocumentationPage() {

-
diff --git a/app/(main)/aide/page.tsx b/app/(main)/aide/page.tsx index f87a381..749d5b0 100644 --- a/app/(main)/aide/page.tsx +++ b/app/(main)/aide/page.tsx @@ -1,225 +1,287 @@ "use client"; -import React from "react"; -import { Card } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { - BookOpen, - Video, - MessageCircle, - Search, - FileText, - HelpCircle, - Lightbulb, - Phone, - Mail, - ExternalLink, -} from "lucide-react"; +import React, { useState } from "react"; +import { Card } from "primereact/card"; +import { Button } from "primereact/button"; +import { InputText } from "primereact/inputtext"; import Link from "next/link"; +import { useRouter } from "next/navigation"; /** * Page principale du centre d'aide * Point d'entrée pour accéder à toute l'aide et la documentation */ export default function AidePage() { + const router = useRouter(); + const [searchTerm, setSearchTerm] = useState(""); + const categories = [ { title: "Démarrage rapide", description: "Premiers pas avec BTPXpress", - icon: Lightbulb, + icon: "pi pi-lightbulb", color: "bg-blue-100 text-blue-600", articles: 12, + link: "/aide/documentation", }, { title: "Gestion des chantiers", description: "Créer et gérer vos chantiers", - icon: FileText, + icon: "pi pi-file", color: "bg-green-100 text-green-600", articles: 25, + link: "/aide/documentation", }, { title: "Facturation", description: "Devis, factures et paiements", - icon: BookOpen, + icon: "pi pi-book", color: "bg-purple-100 text-purple-600", articles: 18, + link: "/aide/documentation", }, { title: "Équipes et planning", description: "Gérer vos équipes et plannings", - icon: Video, - color: "bg-orange-100 text-orange-600", + icon: "pi pi-users", + color: "bg-yellow-100 text-yellow-600", articles: 15, + link: "/aide/documentation", + }, + { + title: "Matériel", + description: "Gestion du matériel et stock", + icon: "pi pi-box", + color: "bg-red-100 text-red-600", + articles: 10, + link: "/aide/documentation", + }, + { + title: "Rapports", + description: "Générer et analyser vos rapports", + icon: "pi pi-chart-bar", + color: "bg-indigo-100 text-indigo-600", + articles: 8, + link: "/aide/documentation", }, ]; - const articlesPopulaires = [ - "Comment créer un nouveau chantier ?", - "Gérer les devis et les factures", - "Planifier l'utilisation du matériel", - "Ajouter des membres à une équipe", - "Générer des rapports d'activité", + const resources = [ + { + title: "Documentation complète", + description: "Guides détaillés et tutoriels pas à pas", + icon: "pi pi-book", + color: "bg-blue-600", + link: "/aide/documentation", + }, + { + title: "Tutoriels vidéo", + description: "Apprenez en vidéo avec nos tutoriels", + icon: "pi pi-video", + color: "bg-red-600", + link: "/aide/tutoriels", + }, + { + title: "Support technique", + description: "Contactez notre équipe d'assistance", + icon: "pi pi-headphones", + color: "bg-green-600", + link: "/aide/support", + }, ]; + const popularArticles = [ + { + title: "Comment créer votre premier chantier ?", + views: 1543, + category: "Chantiers", + }, + { + title: "Gérer les phases et sous-phases", + views: 1234, + category: "Chantiers", + }, + { + title: "Créer un devis rapidement", + views: 1156, + category: "Facturation", + }, + { + title: "Planifier les équipes efficacement", + views: 987, + category: "Équipes", + }, + { + title: "Exporter vos données", + views: 876, + category: "Rapports", + }, + ]; + + const handleSearch = (e: React.FormEvent) => { + e.preventDefault(); + if (searchTerm.trim()) { + router.push(`/aide/documentation?search=${encodeURIComponent(searchTerm)}`); + } + }; + return ( -
+
{/* En-tête */} -
-

- Comment pouvons-nous vous aider ? +
+

+ + Centre d'aide

-

- Recherchez dans notre base de connaissances ou contactez notre support +

+ Comment pouvons-nous vous aider aujourd'hui ?

-
-
- - + + {/* Barre de recherche */} + +
+
+ + + + setSearchTerm(e.target.value)} + className="w-full" + style={{ fontSize: '1.1rem', padding: '1rem' }} + /> +
-
-
+ + - {/* Accès rapide */} -
- - -
-
- -
-
-

Documentation

-

- Guides complets et documentation technique -

-
-
-
- - - - -
-
-
-
-

Tutoriels

-

- Vidéos et guides pas-à-pas -

-
-
-
- - - - -
-
- -
-
-

Support

-

- Contactez notre équipe d'assistance -

-
-
-
- -
- - {/* Catégories populaires */} -
-

- Catégories populaires -

-
- {categories.map((category) => ( - -
- -
-

{category.title}

-

{category.description}

-

- {category.articles} articles -

-
- ))} -
-
- - {/* Articles populaires */} -
-

- Articles populaires -

- -
- {articlesPopulaires.map((article, index) => ( -
-
- - {article} + {/* Ressources principales */} +
+ {resources.map((resource, index) => ( + + +
+
+
- +

{resource.title}

+

{resource.description}

+
- ))} -
- + + + ))}
- {/* Contact direct */} -
- -
-
- +
+ {/* Catégories */} +
+ +

+ + Parcourir par catégorie +

+
+ {categories.map((category, index) => ( + +
+
+
+ +
+
+

+ {category.title} +

+

+ {category.description} +

+ + {category.articles} articles + +
+ +
+
+ + ))}
-
-

- Support téléphonique -

-

- Disponible du lundi au vendredi de 9h à 18h -

- -
-
- + +
- -
-
- + {/* Sidebar */} +
+ {/* Articles populaires */} + +

+ + Articles populaires +

+
+ {popularArticles.map((article, index) => ( +
+

{article.title}

+
+ + {article.category} + + + + {article.views.toLocaleString()} + +
+
+ ))}
-
-

- Support par email -

-

- Réponse sous 24h ouvrées + + + {/* Contact */} + +

+
+ +
+

Besoin d'aide ?

+

+ Notre équipe est disponible pour vous assister

- +
+
+ + +33 1 23 45 67 89 +
+
+ + support@btpxpress.fr +
+
+
-
-
+ +
); diff --git a/app/(main)/aide/support/page.tsx b/app/(main)/aide/support/page.tsx index 61c5f19..35fd3b8 100644 --- a/app/(main)/aide/support/page.tsx +++ b/app/(main)/aide/support/page.tsx @@ -1,23 +1,11 @@ "use client"; import React, { useState } from "react"; -import { Card } from "@/components/ui/card"; -import { Button } from "@/components/ui/button"; -import { Input } from "@/components/ui/input"; -import { Textarea } from "@/components/ui/textarea"; -import { Label } from "@/components/ui/label"; -import { Badge } from "@/components/ui/badge"; -import { - MessageCircle, - Phone, - Mail, - Clock, - CheckCircle, - AlertCircle, - Send, - ArrowLeft, - Headphones, -} from "lucide-react"; +import { Card } from "primereact/card"; +import { Button } from "primereact/button"; +import { InputText } from "primereact/inputtext"; +import { InputTextarea } from "primereact/inputtextarea"; +import { Tag } from "primereact/tag"; import Link from "next/link"; import { useRouter } from "next/navigation"; @@ -71,24 +59,24 @@ export default function SupportPage() { }, ]; - const getStatusBadge = (status: string) => { + const getStatusTag = (status: string) => { switch (status) { case "resolved": return ( - - + + Résolu - + ); case "in-progress": return ( - - + + En cours - + ); default: - return Nouveau; + return Nouveau; } }; @@ -98,8 +86,8 @@ export default function SupportPage() {
- @@ -120,8 +108,8 @@ export default function SupportPage() {
- - Nom complet * +
- - Email * +
- - Sujet * +
- +