refactor: uniform validation, fix create form UX, dedupe filter dropdowns

- Remove dead registerValidator (Auth/register.ts), unused since signupValidator
  is the one actually wired to NewAccountController
- computers/create.vue: switch to useForm() + @submit.prevent so the form
  submits on Enter and shows a processing state, matching components/create.vue
- components/edit.vue: drop the 'origin' field, which was never provided by
  the backend (edit() never shared it) and therefore always undefined
- Extract FilterDropdown.vue and reuse it in ComponentsViewer/ComputersViewer,
  removing ~80 lines of duplicated dropdown markup/logic and fixing duplicate
  HTML ids (id="used" appeared twice in ComputersViewer)
- Move MIGRATION_*.md artifacts into docs/migration-history/
This commit is contained in:
Kevin L'Hereec committed 2026-07-23 11:10:17 +02:00
1 parent 3cc189c534
commit 3579c9dfec
10 files changed
+163 -262

No files matched your search

@@ -0,0 +1,156 @@
# ✅ Checklist de Migration - Pages Inertia
## 📦 Fichiers Migrés
### Pages d'Authentification
- [x] `pages/auth/login.vue` - Page de connexion
- [x] `pages/auth/signup.vue` - Page d'inscription
- [x] `pages/account/signup.vue` - Création de compte
### Pages de Gestion des Composants
- [x] `pages/components/index.vue` - Liste
- [x] `pages/components/create.vue` - Création
- [x] `pages/components/edit.vue` - Édition
- [x] `pages/components/show.vue` - Détails
### Pages de Gestion des Ordinateurs
- [x] `pages/computers/index.vue` - Liste
- [x] `pages/computers/create.vue` - Création
- [x] `pages/computers/edit.vue` - Édition
- [x] `pages/computers/show.vue` - Détails
### Pages d'Erreur
- [x] `pages/errors/not_found.vue` - 404
- [x] `pages/errors/server_error.vue` - 500
### Layouts
- [x] `pages/layout/defaultLayout.vue` - Layout principal
- [x] `pages/layout/emptyLayout.vue` - Layout vide
- [x] `pages/layout/sidebar.vue` - Navigation
- [x] `pages/layout/header.vue` - En-tête
### Composants Réutilisables
- [x] `pages/widgets/AuthErrorAlert.vue`
- [x] `pages/widgets/ComponentEditor.vue`
- [x] `pages/widgets/ComponentsViewer.vue`
- [x] `pages/widgets/ComputerCard.vue`
- [x] `pages/widgets/ComputerComponentsTable.vue`
- [x] `pages/widgets/ComputersViewer.vue`
- [x] `pages/widgets/DeleteConfirmationModal.vue`
- [x] `pages/widgets/SimpleGallery.vue`
- [x] `pages/widgets/TableComponent.vue`
- [x] `pages/widgets/ValidationError.vue`
### Assets & Resources
- [x] `assets/icons/` - 18 fichiers SVG
- [x] `assets/images/` - Placeholders
- [x] `composables/isAdminMode.ts` - Gestion admin
- [x] `composables/useSidebar.ts` - Gestion sidebar
- [x] `directives/v_validation_error.ts` - Validation
- [x] `directives/v-delete-confirm.ts` - Confirmation
- [x] `directives/v-price.ts` - Formatage prix
- [x] `pages/types/UITypes.ts` - Types TypeScript
- [x] `app.ts` - Configuration Inertia (mise à jour)
## 📋 Étapes de Validation
### 1. Vérification des Imports
- [ ] Vérifier que tous les chemins d'import utilisent l'alias `~/`
- [ ] Vérifier que les imports de composants existent
- [ ] Vérifier que les imports d'icônes fonctionnent
### 2. Configuration du Routage
- [ ] Vérifier que les routes AdonisJS retournent les bonnes pages Inertia
- [ ] Tester la navigation entre les pages
- [ ] Vérifier les redirections de layout (auth vs. default)
### 3. Styles et CSS
- [ ] Vérifier que Tailwind CSS est chargé
- [ ] Tester le design responsive
- [ ] Vérifier l'apparence du sidebار et de l'en-tête
### 4. Composants & Directives
- [ ] Vérifier que VueDatePicker fonctionne
- [ ] Tester la directive v-validation-error
- [ ] Tester la directive v-price
- [ ] Tester la directive v-delete-confirm
- [ ] Vérifier les composants Carousel
### 5. Fonctionnalités
- [ ] Tester le toggle admin/classic mode
- [ ] Tester la barre latérale responsive
- [ ] Vérifier l'affichage du profil utilisateur
- [ ] Tester la déconnexion
### 6. Pages Critiques
- [ ] Page de connexion - formulaire et validation
- [ ] Page de création de composant - formulaire complet
- [ ] Page de liste des ordinateurs - grille responsive
- [ ] Page de détails - affichage corrects des données
- [ ] Pages d'erreur - design cohérent
## 🔧 Configuration Requise
### Dependencies Vérifiées
```json
{
"@adonisjs/inertia": "^1.0",
"@inertiajs/vue3": "^1.0",
"@adonisjs/core": "^6.0",
"vue": "^3.0",
"tailwindcss": "^3.0",
"@vuepic/vue-datepicker": "latest",
"vue3-carousel": "latest",
"vue-sonner": "latest"
}
```
## 🚨 Points d'Attention
1. **Base Données**: Assurez-vous que les modèles AdonisJS correspondent aux types TypeScript
2. **Authentification**: Vérifier que les guards et middlewares d'auth sont correctement configurés
3. **CSRF**: Vérifier que les tokens CSRF sont transmis correctement
4. **Permissions**: Vérifier que le mode admin accès les bonnes données
5. **Fichiers**: Adapter les chemins de fichiers uploadés si nécessaire
## 📝 Notes de Développement
### Modèles AdonisJS (À adapter)
Les pages supposent les modèles suivants dans `app/models/`:
- `Component` - Modèle de composant
- `Computer` - Modèle d'ordinateur
- `ComponentType` - Type de composant
- `ComputerState` - État d'ordinateur
- `User` - Utilisateur authentifié
### Types TypeScript
Les types sont définis dans `inertia/pages/types/UITypes.ts` - adapter selon vos modèles réels
### Chemins d'Import
L'alias `~/` est configuré pour pointer vers `inertia/`:
- `~/pages/` → `inertia/pages/`
- `~/composables/` → `inertia/composables/`
- `~/directives/` → `inertia/directives/`
- `~/assets/` → `inertia/assets/`
## 🎯 Résumé de la Migration
✅ **Tous les fichiers Inertia ont été migrés de pc-builder vers pc-builderV2**
### Fichiers Créés: 45+
- 11 Pages Inertia
- 4 Layouts
- 10 Composants widgets
- 18 Icônes SVG
- 2 Composables
- 3 Directives
- 1 Fichier de types
### Fichiers Modifiés: 1
- `inertia/app.ts` - Configuration complète pour AdonisJS V7
---
**Date:** Juin 2026
**Status:** ✅ Terminé
**Prochaine Étape:** Adapter les controllers et routes AdonisJS
@@ -0,0 +1,218 @@
# 🎉 Migration Complète - Pages Inertia PC Builder → PC Builder V2
## 📊 Statistiques
- **Fichiers Migrés:** 45+
- **Pages Inertia:** 15
- **Composants Widget:** 10
- **Layouts:** 4
- **Composables:** 2
- **Directives:** 3
- **Icônes SVG:** 18
- **Fichiers Assets:** 2 (images)
- **Fichiers de Configuration:** 1 (`app.ts`)
## ✅ Résultats
### Pages Inertia Créées (15)
```
✅ inertia/pages/auth/login.vue
✅ inertia/pages/auth/signup.vue
✅ inertia/pages/account/signup.vue
✅ inertia/pages/components/index.vue
✅ inertia/pages/components/create.vue
✅ inertia/pages/components/edit.vue
✅ inertia/pages/components/show.vue
✅ inertia/pages/computers/index.vue
✅ inertia/pages/computers/create.vue
✅ inertia/pages/computers/edit.vue
✅ inertia/pages/computers/show.vue
✅ inertia/pages/errors/not_found.vue (mise à jour)
✅ inertia/pages/errors/server_error.vue (mise à jour)
✅ inertia/pages/layout/defaultLayout.vue
✅ inertia/pages/layout/emptyLayout.vue
```
### Layouts & Navigation (4)
```
✅ inertia/pages/layout/defaultLayout.vue
✅ inertia/pages/layout/emptyLayout.vue
✅ inertia/pages/layout/sidebar.vue
✅ inertia/pages/layout/header.vue
```
### Composants Réutilisables (10)
```
✅ inertia/pages/widgets/AuthErrorAlert.vue
✅ inertia/pages/widgets/ComponentEditor.vue
✅ inertia/pages/widgets/ComponentsViewer.vue
✅ inertia/pages/widgets/ComputerCard.vue
✅ inertia/pages/widgets/ComputerComponentsTable.vue
✅ inertia/pages/widgets/ComputersViewer.vue
✅ inertia/pages/widgets/DeleteConfirmationModal.vue
✅ inertia/pages/widgets/SimpleGallery.vue
✅ inertia/pages/widgets/TableComponent.vue
✅ inertia/pages/widgets/ValidationError.vue
```
### Composables (2)
```
✅ inertia/composables/isAdminMode.ts
✅ inertia/composables/useSidebar.ts
```
### Directives Personnalisées (3)
```
✅ inertia/directives/v_validation_error.ts
✅ inertia/directives/v-delete-confirm.ts
✅ inertia/directives/v-price.ts
```
### Assets Copiés
```
✅ inertia/assets/icons/ (18 fichiers SVG)
✅ inertia/assets/images/ (2 fichiers)
✅ inertia/pages/types/UITypes.ts (types TypeScript)
```
### Configuration Mise à Jour
```
✅ inertia/app.ts (configuration complète pour AdonisJS V7)
```
## 🎯 Fonctionnalités Incluées
### Layout Dynamique
- ✅ DefaultLayout pour les pages authentifiées
- ✅ EmptyLayout pour pages d'authentification
- ✅ Sélection automatique basée sur la route
### Composants Globaux
- ✅ VueDatePicker pour sélection de dates
- ✅ Carousel/Slide pour galeries
- ✅ Directives d'erreur de validation
- ✅ Directive de confirmation avant suppression
- ✅ Directive de formatage des prix
### Mode Admin
- ✅ Toggle Admin/Classic mode
- ✅ Affichage conditionnel des données sensibles
- ✅ Persistance du mode via composable
### Navigation Responsive
- ✅ Sidebar pliable sur mobile
- ✅ Menu hamburger
- ✅ Menu déroulant profil utilisateur
## 🔄 Conversion AdonisJS V6 → V7
### Changements Appliqués
1. **Directives**: Import avec `// @ts-ignore` pour compatibilité
2. **Composables**: Exportation simplifiée avec ref()
3. **Types**: Utilisation de types génériques pour Page Props
4. **Imports**: Chemins relatifs remplacés par alias `~/`
### Améliorations V7
- ✅ Support natif de Tailwind CSS
- ✅ Routing simplifié avec middleware
- ✅ Meilleur support TypeScript
- ✅ Configuration Vite optimisée
## 📦 Dépendances Requises
Vérifiez que votre `package.json` inclut:
```json
{
"@adonisjs/inertia": "^1.0",
"@inertiajs/vue3": "^1.0",
"@vuepic/vue-datepicker": "latest",
"vue3-carousel": "latest",
"vue-sonner": "latest",
"tailwindcss": "^3.0"
}
```
## 🚀 Prochaines Étapes
### 1. Valider la Structure (✓ Fait)
- [x] Pages créées
- [x] Composants copiés
- [x] Assets migrés
- [x] Configuration mise à jour
### 2. Adapter les Controllers AdonisJS
- [ ] Créer/adapter les controllers pour chaque page
- [ ] Implémenter les routes correspondantes
- [ ] Adapter les retours Inertia avec les bonnes données
### 3. Tester les Fonctionnalités
- [ ] Tester la navigation
- [ ] Vérifier les formulaires
- [ ] Tester les directives
- [ ] Valider le design responsive
### 4. Affiner les Imports
- [ ] Vérifier tous les chemins d'import
- [ ] Adapter les types de modèles si nécessaire
- [ ] Résoudre les imports circulaires si présents
## 📝 Documentation Générée
- `MIGRATION_PAGES_SUMMARY.md` - Résumé détaillé de la migration
- `MIGRATION_CHECKLIST.md` - Checklist de validation
- `MIGRATION_COMPLETE.md` - Ce fichier
## 🎓 Guide Rapide
### Créer une Nouvelle Page
```vue
<!-- inertia/pages/example.vue -->
<script setup lang="ts">
import { Link } from '@inertiajs/vue3'
defineProps<{ data: any[] }>()
</script>
<template>
<div class="container">
<!-- Votre contenu -->
</div>
</template>
```
### Ajouter une Directive Personnalisée
```vue
<input
v-validation-error="getErrorMessage('email')"
type="email"
placeholder="Email"
/>
```
### Utiliser un Composable
```typescript
import { useSidebar } from '~/composables/useSidebar'
const { isOpen } = useSidebar()
```
## ⚠️ Points Critiques
1. **Base de Données**: Mettre à jour les schémas si différents
2. **Authentification**: Configurer les guards correctement
3. **CSRF**: Inclure les tokens dans les formulaires
4. **Uploads**: Adapter les chemins de fichiers
5. **Permissions**: Vérifier l'accès aux données sensibles
## 🎉 Status: COMPLET
✅ Migration des pages Inertia de pc-builder → pc-builderV2 **TERMINÉE**
La structure Inertia est maintenant prête pour l'intégration avec les controllers et routes AdonisJS V7.
---
**Date de Migration:** Juin 2026
**Version Source:** pc-builder (AdonisJS V6)
**Version Cible:** pc-builderV2 (AdonisJS V7)
**Statut:** ✅ Complet
@@ -0,0 +1,164 @@
# Migration des Pages Inertia - PC Builder V2
## 📋 Résumé de la Migration
Toutes les pages Inertia du projet **pc-builder** ont été migrées vers **pc-builderV2** avec AdonisJS V7.
## ✅ Pages Migrées
### Pages d'Authentification (auth/)
- ✅ `auth/login.vue` - Page de connexion
- ✅ `auth/signup.vue` - Page d'inscription
- ✅ `account/signup.vue` - Page de création de compte (redondant)
### Pages de Composants (components/)
- ✅ `components/index.vue` - Liste des composants
- ✅ `components/create.vue` - Création d'un composant
- ✅ `components/edit.vue` - Édition d'un composant
- ✅ `components/show.vue` - Détails d'un composant
### Pages d'Ordinateurs (computers/)
- ✅ `computers/index.vue` - Liste des ordinateurs
- ✅ `computers/create.vue` - Création d'un ordinateur
- ✅ `computers/edit.vue` - Édition d'un ordinateur
- ✅ `computers/show.vue` - Détails d'un ordinateur
### Pages d'Erreur (errors/)
- ✅ `errors/not_found.vue` - Page 404 (mise à jour avec style)
- ✅ `errors/server_error.vue` - Page 500 (mise à jour avec style)
### Layouts (pages/layout/)
- ✅ `layout/defaultLayout.vue` - Layout principal avec sidebar et header
- ✅ `layout/emptyLayout.vue` - Layout vide pour auth
- ✅ `layout/sidebar.vue` - Barre latérale de navigation
- ✅ `layout/header.vue` - En-tête avec profil utilisateur
### Composants Réutilisables (pages/widgets/)
- ✅ `AuthErrorAlert.vue` - Alerte d'erreur d'authentification
- ✅ `ComponentEditor.vue` - Éditeur de composants
- ✅ `ComponentsViewer.vue` - Visionneuse de composants
- ✅ `ComputerCard.vue` - Carte d'ordinateur
- ✅ `ComputerComponentsTable.vue` - Table de composants d'ordinateur
- ✅ `ComputersViewer.vue` - Visionneuse d'ordinateurs
- ✅ `DeleteConfirmationModal.vue` - Modal de confirmation de suppression
- ✅ `SimpleGallery.vue` - Galerie simple
- ✅ `TableComponent.vue` - Composant de table
- ✅ `ValidationError.vue` - Afficheur d'erreurs de validation
## 🎯 Ressources Copiées
### Assets (inertia/assets/)
- ✅ **Icons/** - 18 fichiers SVG d'icônes
- case.svg, cooler.svg, cpu.svg, cross-icon.svg, default-icon.svg
- fan.svg, graphic-card.svg, hard-drive.svg, memory.svg, motherboard.svg
- mvne.svg, power-supply.svg, site-icon-with-title.svg, site-icon.svg
- trash-icon.svg, user-profile-icon.svg, wifi-card.svg, index.ts
- ✅ **Images/** - Images utilitaires
- no-Image-placeholder.svg, index.ts
### Composables (inertia/composables/)
- ✅ `isAdminMode.ts` - Gestion du mode admin
- ✅ `useSidebar.ts` - Gestion de la sidebar
### Directives (inertia/directives/)
- ✅ `v_validation_error.ts` - Directive pour afficher les erreurs de validation
- ✅ `v-delete-confirm.ts` - Directive pour confirmation avant suppression
- ✅ `v-price.ts` - Directive pour formatage des prix
### Types (inertia/pages/types/)
- ✅ `UITypes.ts` - Types TypeScript pour l'interface utilisateur
## 🔧 Modifications AdonisJS V7
### app.ts - Mise à jour
Le fichier `inertia/app.ts` a été mis à jour pour :
1. Inclure les imports de directives
2. Ajouter les composants globaux (VueDatePicker, Carousel, Slide)
3. Implémenter la logique de sélection de layout dynamique
4. Enregistrer les directives personnalisées
### Structure de répertoires
```
inertia/
├── app.ts (mis à jour)
├── client.ts
├── ssr.ts
├── assets/
│ ├── icons/
│ └── images/
├── composables/
│ ├── isAdminMode.ts
│ └── useSidebar.ts
├── directives/
│ ├── v_validation_error.ts
│ ├── v-delete-confirm.ts
│ └── v-price.ts
├── pages/
│ ├── auth/
│ │ ├── login.vue
│ │ └── signup.vue
│ ├── account/
│ │ └── signup.vue
│ ├── components/
│ │ ├── index.vue
│ │ ├── create.vue
│ │ ├── edit.vue
│ │ └── show.vue
│ ├── computers/
│ │ ├── index.vue
│ │ ├── create.vue
│ │ ├── edit.vue
│ │ └── show.vue
│ ├── errors/
│ │ ├── not_found.vue
│ │ └── server_error.vue
│ ├── layout/
│ │ ├── defaultLayout.vue
│ │ ├── emptyLayout.vue
│ │ ├── sidebar.vue
│ │ └── header.vue
│ ├── types/
│ │ └── UITypes.ts
│ └── widgets/
│ ├── AuthErrorAlert.vue
│ ├── ComponentEditor.vue
│ ├── ComponentsViewer.vue
│ ├── ComputerCard.vue
│ ├── ComputerComponentsTable.vue
│ ├── ComputersViewer.vue
│ ├── DeleteConfirmationModal.vue
│ ├── SimpleGallery.vue
│ ├── TableComponent.vue
│ └── ValidationError.vue
└── css/
└── app.css (existant)
```
## 🎨 Améliorations Apportées
1. **Pages d'erreur** - Mise à jour avec design cohérent et boutons de navigation
2. **Layout dynamique** - Sélection automatique du layout en fonction de la route
3. **Admin mode toggle** - Basculer entre mode admin et mode classique
4. **Intégration complète** - Toutes les directives et composants sont disponibles
## 📝 Notes Importantes
- Les chemins des imports utilisent les alias Vite (~/) configurés dans `tsconfig.inertia.json`
- Les composants et directives sont enregistrés globalement dans `app.ts`
- La structure de layout suit le pattern de pc-builder avec DefaultLayout et EmptyLayout
- Les widgets réutilisables sont dans `pages/widgets/` pour maintenir la compatibilité
## 🚀 Prochaines Étapes
1. Vérifier que tous les imports sont corrects dans les controllers AdonisJS
2. Adapter les types de modèles si nécessaire
3. Tester la navigation et les layouts
4. Vérifier les directives v-validation-error, v-price, v-delete-confirm
5. Adapter les appels API selon la structure V7
---
**Date de migration:** Juin 2026
**Source:** pc-builder
**Destination:** pc-builderV2 (AdonisJS V7)