Composants Vue
Introduction
Ce document fournit une documentation complète des composants Vue.js utilisés dans le projet Osuny. Le projet utilise Vue 3 pour créer des interfaces utilisateur interactives et réactives dans différentes parties de l’application administrative.
Structure des composants Vue
Les composants Vue sont organisés en plusieurs applications principales :
- Composants Généraux - Composants réutilisables
- Media Picker - Gestion des médias et des images
- Blocks Editor - Éditeur de blocs de contenu
- Time Slots - Gestion des créneaux horaires
- SSO Mapping - Mappage des champs SSO
Liste complète des composants
1. Composants généraux
/app/javascript/apps/components/
CropperModal.vue
- Description : Modal pour recadrer les images avec vue-advanced-cropper
- Fonctionnalités :
- Recadrage d’images avec rotation
- Interface modale avec aperçu
- Envoi des données de recadrage au serveur
- Gestion des états de chargement
- Dépendances :
vue-advanced-cropper - Événements :
@cropped- Émis lorsque l’image est recadrée
Summernote.vue
- Description : Éditeur de texte riche basé sur Summernote
- Fonctionnalités :
- Édition de texte riche WYSIWYG
- Support multilingue
- Intégration avec le système de traduction
- Utilisation : Utilisé pour les champs de texte riche comme les crédits d’image
Changes.vue
- Description : Composant pour suivre et afficher les changements
- Fonctionnalités :
- Suivi des modifications
- Affichage des différences
- Gestion des versions
2. Media Picker
/app/javascript/apps/media-picker/
MediaPickerApp.vue (Application principale)
- Description : Application principale pour la sélection et la gestion des médias
- Fonctionnalités :
- Sélection d’images depuis différentes sources
- Gestion des métadonnées des images (alt, crédit)
- Intégration avec Summernote pour les crédits
- Suivi des changements
- Composants enfants :
- ImageUploader
- Cloud
- Medias
- Summernote
- Changes
ImageUploader.vue
- Description : Composant pour téléverser des images
- Fonctionnalités :
- Téléchargement de fichiers
- Prévisualisation des images
- Gestion des erreurs de téléchargement
- Événements :
@uploaded- Émis lorsque le téléchargement est terminé
Cloud.vue
- Description : Intégration avec des services cloud d’images
- Fonctionnalités :
- Connexion à Unsplash
- Connexion à Pexels
- Recherche et sélection d’images
- Gestion des crédits automatiques
- Événements :
@unsplashSelected- Image sélectionnée depuis Unsplash@pexelsSelected- Image sélectionnée depuis Pexels
Medias.vue
- Description : Bibliothèque de médias locale
- Fonctionnalités :
- Affichage des médias disponibles
- Filtrage et recherche
- Sélection de médias existants
- Événements :
@mediaSelected- Médias sélectionné depuis la bibliothèque
Taxonomies.vue
- Description : Gestion des taxonomies pour les médias
- Fonctionnalités :
- Organisation des médias par catégories
- Filtrage par taxonomie
- Interface de sélection
Categories.vue
- Description : Gestion des catégories pour les médias
- Fonctionnalités :
- Organisation hiérarchique
- Sélection multiple
- Interface utilisateur intuitive
3. Blocks Editor
/app/javascript/apps/blocks-editor/
BlocksEditorApp.vue (Application principale)
- Description : Éditeur de blocs de contenu pour la création de pages
- Fonctionnalités :
- Gestion des blocs de contenu
- Réorganisation par glisser-déposer
- Mode plan pour la visualisation
- Édition en contexte
- Gestion des versions
- Composants enfants :
- Blocks
- Editor
- OffcanvasShell
- TemplatePicker
Blocks.vue
- Description : Liste et gestion des blocs
- Fonctionnalités :
- Affichage de la liste des blocs
- Réorganisation des blocs
- Actions sur les blocs (éditer, dupliquer, supprimer)
- Gestion des états
Editor.vue
- Description : Éditeur de bloc individuel
- Fonctionnalités :
- Édition des propriétés du bloc
- Validation et sauvegarde
- Interface modale
- Événements :
@save- Sauvegarde du bloc@close- Fermeture de l’éditeur
OffcanvasShell.vue
- Description : Conteneur pour l’interface off-canvas
- Fonctionnalités :
- Gestion de l’état (ouvert/fermé)
- Animation et transitions
- Accessibilité
TemplatePicker.vue
- Description : Sélecteur de templates pour nouveaux blocs
- Fonctionnalités :
- Liste des templates disponibles
- Prévisualisation
- Création de nouveaux blocs
- Événements :
@created- Nouveau bloc créé
Inputs (composants d’entrée spécialisés)
MultiImageInput.vue
- Description : Champ de saisie pour plusieurs images
- Fonctionnalités :
- Sélection multiple
- Prévisualisation
- Réorganisation
CodeInput.vue
- Description : Éditeur de code avec coloration syntaxique
- Fonctionnalités :
- Support de plusieurs langages
- Numérotation des lignes
- Thèmes personnalisables
UploadInput.vue
- Description : Champ de téléchargement de fichiers
- Fonctionnalités :
- Glisser-déposer
- Validation des types de fichiers
- Progression du téléchargement
RichTextInput.vue
- Description : Éditeur de texte riche intégré
- Fonctionnalités :
- Outils de mise en forme
- Insertion de médias
- Gestion des liens
4. Time Slots
/app/javascript/apps/time-slots/
TimeSlotsApp.vue (Application principale)
- Description : Gestion des créneaux horaires
- Fonctionnalités :
- Création et modification de créneaux
- Gestion des disponibilités
- Interface calendaire
Duration.vue
- Description : Composant pour la gestion de la durée
- Fonctionnalités :
- Sélection de la durée
- Conversion entre formats
- Validation
5. SSO Mapping
/app/javascript/apps/sso-mapping/
SsoMappingApp.vue (Application principale)
- Description : Application pour mapper les champs SSO (Single Sign-On) aux champs internes
- Fonctionnalités :
- Mappage des champs SSO aux champs internes de l’application
- Interface glisser-déposer pour réorganiser les champs
- Gestion des rôles et permissions
- Configuration flexible des correspondances
- Composants enfants :
- VueDraggableNext (pour le glisser-déposer)
- Fonctionnalités détaillées :
- Ajout dynamique de nouveaux champs de mappage
- Sélection des clés SSO et des clés internes
- Gestion des rôles associés à chaque mappage
- Interface utilisateur intuitive avec réorganisation par glisser-déposer
- Activation automatique des champs de sélection
- Données :
fields: Liste des champs de mappage configuréskeys: Liste des clés disponibles pour le mappage
- Méthodes principales :
addField(): Ajoute un nouveau champ de mappageenableSelects(): Active les champs de sélection après manipulation du DOM
Architecture technique
Structure des fichiers
app/javascript/apps/
├── components/ # Composants réutilisables
├── media-picker/ # Application de sélection de médias
│ ├── components/ # Composants spécifiques
│ └── MediaPickerApp.vue # Point d'entrée
├── blocks-editor/ # Éditeur de blocs
│ ├── components/ # Composants spécifiques
│ │ ├── inputs/ # Composants d'entrée
│ └── BlocksEditorApp.vue # Point d'entrée
├── time-slots/ # Gestion des créneaux
│ ├── components/ # Composants spécifiques
│ └── TimeSlotsApp.vue # Point d'entrée
└── sso-mapping/ # Mappage SSO
└── SsoMappingApp.vue # Point d'entréeBonnes pratiques
- Internationalisation : Tous les composants utilisent le système de traduction avec
$t() - Accessibilité : Respect des standards ARIA et accessibilité
- Gestion d’état : Utilisation de Vuex pour la gestion d’état globale
- Communication : Événements personnalisés pour la communication entre composants
- Style : Utilisation de classes CSS spécifiques avec préfixe
vue__
Intégration avec Rails
Les applications Vue sont intégrées dans l’application Rails :
- Points de montage : Chaque application Vue a un point de montage HTML
- Données initiales : Transmission des données via
data-*attributes - CSRF : Gestion des tokens CSRF pour les requêtes AJAX
- Routes : Utilisation des routes Rails pour les endpoints API
Exemples d’utilisation
Intégration de MediaPickerApp
<div id="media-picker-app"
data-current='<%= @current.to_json %>'
data-changes-endpoint="<%= changes_path %>">
</div>// Dans un fichier JavaScript de pack
import MediaPickerApp from '../apps/media-picker/MediaPickerApp.vue';
document.addEventListener('DOMContentLoaded', () => {
const appElement = document.getElementById('media-picker-app');
if (appElement) {
const app = Vue.createApp(MediaPickerApp);
app.mount(appElement);
}
});Utilisation de CropperModal
// Dans un composant parent
methods: {
openCropper(blob) {
this.$refs.cropperModal.launch(blob);
},
onCropped(blob) {
// Gérer l'image recadrée
}
}<CropperModal ref="cropperModal" @cropped="onCropped" />Dépendances externes
vue-advanced-cropper- Pour le composant CropperModalsummernote- Éditeur de texte richenotyf- Notifications utilisateurbootstrap-icons- Icônes utilisées dans l’interface