Interface Frontend
Frontend et interactions CRUD
Résumé express : Connecter le backend à une interface utilisateur pour afficher, créer, modifier et supprimer des livres avec un système de store et de composants réutilisables.
1. Structure de la page principale
Créer la page frontend
- Créer une nouvelle page pour l'interface
- Design : liste de livres à gauche, interactions à droite
Configuration du conteneur principal
- Créer un bloc conteneur avec les styles :
- Display : flex
- Gap : valeur aléatoire (ex: 12px)
- Align-items : flex-start (alignement en haut)
- Width : 100%
- Padding : 12px
Créer le conteneur de liste (booklist)
- Ajouter un bloc nommé booklist dans le conteneur
- Configurer les styles :
- Display : grid
- Gap : 2px
- Grid-template-columns : 2 colonnes
- Width : 50% (moitié de l'espace)
- Height : 100vh
2. Composant BookInfo
Créer le composant de base
- Créer un nouveau composant nommé book-info
- Définir les styles :
- Width : 100%
- Height : 80px
- Background : utiliser un token (ex: background-lightest)
- Padding : 12px
- Border-radius : 8px
Si le composant n'est pas visible, changer le mode preview de "Compact" à "Stretch"
Ajouter les propriétés dynamiques
- Créer deux custom text dans le composant
- Premier texte : écrire
{title}- Les accolades créent une propriété dynamique (devient bleue)
- Deuxième texte : écrire
{author}
Configurer les propriétés du composant
- Cliquer sur le composant book-info
- Définir les propriétés en entrée :
- title (string)
- author (string)
- id (string) - à ajouter pour les interactions futures
- Définir des valeurs par défaut pour les tests
Lier les propriétés aux textes
- Cliquer sur le premier custom text
- Cliquer sur l'icône éclair (⚡)
- Sélectionner la propriété title du composant
- Répéter pour author
Styliser le titre
- Sélectionner le custom text du titre
- Modifier les styles :
- Font-size : 24px
- Color : content-deepest (pour plus de contraste)
3. Store - Gestion des données
Créer le store
- Créer un nouveau store nommé book-store
- Le store stocke les données côté frontend
- Avantage : une seule requête à la base de données, puis réutilisation des données
Définir le schéma du store
Créer la structure suivante :
books (array of objects)
├─ id (string)
├─ author (string)
└─ title (string)
4. Charger les données au montage
Logique de chargement
- Aller dans l'onglet Logique de la page
- Utiliser le trigger onMounted (au chargement de la page)
Récupérer les données
- Tirer un fil d'exécution depuis onMounted
- Appeler la route getbooks (créée dans l'épisode précédent)
- La route renvoie une réponse avec toutes les données
Mettre à jour le store
- Créer un node get pour récupérer bookstore
- Créer un node setproperty
- Relier bookstore à target
- Sélectionner la propriété books
- Relier la réponse de getbooks au champ books
- Relier le fil d'exécution
Tester avec Execute et Ctrl+Espace : les données de db-books apparaissent dans le store
5. Afficher les livres avec Template
Créer la boucle
- Dans la page, supprimer les composants book-info de test
- Ajouter un composant book-info
- Clic droit sur book-info → Wrap a component
- Sélectionner Template
- Changer de if à for (pour itérer)
- Sélectionner books du store
Lier les données dynamiques
- Cliquer sur le composant book-info dans le template
- Définir les propriétés :
- title : cliquer sur l'éclair → sélectionner title du template
- author : cliquer sur l'éclair → sélectionner author du template
- id : cliquer sur l'éclair → sélectionner id du template
En mode Builder, mettre le template sur "All" pour voir tous les éléments (au lieu de "Once")
6. Pop-up de création
Créer la structure de la pop-up
- Cliquer sur + ou taper "pop-up" dans la recherche
- Ajouter un bloc dans la pop-up contenant :
- Deux text input
- Un button
Styliser la pop-up
- Pour visualiser en mode développement, forcer l'affichage dans les propriétés
- Configurer le bloc :
- Width : 200px
- Display : flex
- Flex-direction : column
- Gap : 12px
- Configurer le bouton :
- Width : 100%
- Text : "Create"
Configurer les inputs
- Premier input :
- Placeholder : "book title"
- Deuxième input :
- Placeholder : "author"
Créer les variables de page
- Dans la page, ajouter deux variables :
- title (string)
- author (string)
Lier les inputs aux variables
- Premier text input : sélectionner model → choisir title
- Deuxième text input : sélectionner model → choisir author
Le model crée une liaison bidirectionnelle entre l'input et la variable
7. Logique de création
Tester la récupération des valeurs
- Sur le bouton Create, ajouter un événement onClick
- Créer un get title et l'afficher dans la console
- Tester en preview : écrire dans l'input → cliquer Create → voir la valeur
Appeler la route de création
- Supprimer le test console
- Tirer un fil depuis onClick
- Appeler la route createbooks
- Pour le body :
- Tirer un fil → créer automatiquement un create object
- Relier get title au champ title
- Relier get author au champ author
Mettre à jour le store
- Créer un get bookstore
- Créer un setproperty
- Sélectionner books
- Relier la réponse de createbooks
Le livre est maintenant ajouté à la liste !
8. Gestion de l'affichage de la pop-up
Créer la variable de contrôle
- Ajouter une variable createBook (boolean) dans la page
- Sur la pop-up, définir le model : createBook
- Si createBook = true → pop-up visible
- Si createBook = false → pop-up cachée
Ouvrir la pop-up avec le bouton +
- Créer un button dans la page
- Configurer le bouton :
- Icon : plus
- Size : large
- Shape : round
- Styliser avec position :
- Position : absolute
- Bottom : 16px
- Right : 16px
- Ajouter un événement onClick
- Créer un set createBook → cocher (passer à true)
Fermer la pop-up après création
- Dans la logique du bouton Create
- Ajouter un set createBook → décocher (passer à false)
- Placer après la mise à jour du store
Cliquer en dehors de la pop-up la ferme automatiquement
9. Affichage du livre sélectionné
Ajouter au schéma du store
Créer un nouvel objet dans book-store :
selectedBook (object)
├─ id (string)
├─ author (string)
└─ title (string)
Créer le conteneur d'informations
- Ajouter un bloc bookinfo (différent du composant)
- Placer en haut pour clarté
- Configurer :
- Width : 50%
- Ajouter :
- Un custom text pour le titre
- Un bloc avec deux icônes
Ajouter les icônes d'action
- Première icône :
- Icon : poubelle (trash)
- Size : plus grande
- Color : couleur distincte
- Cursor : pointer
- Deuxième icône :
- Icon : crayon (edit)
- Color : autre couleur
- Cursor : pointer
Logique de sélection dans le composant
- Dans le composant book-info, ajouter un événement onClick sur le container
- Créer un get bookstore
- Créer un setproperty → sélectionner selectedBook
- Créer un create object automatiquement
- Relier les propriétés :
- get id → id
- get author → author
- get title → title
Afficher le titre sélectionné
- Dans le custom text du conteneur bookinfo
- Écrire
{selectedTitle}pour créer la propriété - Définir selectedTitle =
bookstore.selectedBook.title
Cliquer sur un livre met à jour l'affichage automatiquement
10. Suppression d'un livre
Logique de suppression
- Sur l'icône poubelle, ajouter un événement onClick
- Appeler la route deletebook
- Créer un create object pour le body :
- id : récupérer avec get bookstore → propriété selectedBook.id
Mettre à jour le store
- Créer un setproperty pour books
- Relier la réponse
Réinitialiser la sélection
- Créer un autre setproperty pour selectedBook
- Ne rien relier (laisser vide)
- Raison : le livre n'existe plus, on vide la sélection
Amélioration avec condition
- Wrapper le conteneur bookinfo dans un template
- Utiliser la logique if
- Condition :
bookstore.selectedBook.idexiste (non vide) - Décocher pour inverser : afficher seulement si id existe
Après suppression, les icônes disparaissent automatiquement
11. Modification d'un livre
Créer la pop-up de modification
- Copier la pop-up de création
- Renommer en "Modify" (et l'autre en "Create" pour différencier)
- Changer le texte du bouton en "Modify"
Créer la variable de contrôle
- Ajouter une variable modifyBook (boolean)
- Sur la pop-up Modify, définir le model : modifyBook
Ouvrir la pop-up et pré-remplir
- Sur l'icône crayon, ajouter un événement onClick
- Créer un set modifyBook → true
- Pré-remplir les inputs :
- Créer un get bookstore
- Récupérer selectedBook
- Créer un spread pour déstructurer
- set title → relier title du spread
- set author → relier author du spread
Logique de modification
- Sur le bouton Modify, ajouter un événement onClick
- Appeler la route updatebooks
- Créer le body :
- id : récupérer depuis bookstore.selectedBook.id
- title : get title (de la variable)
- author : get author (de la variable)
Mettre à jour le store
- setproperty pour books → relier la réponse
- setproperty pour selectedBook → relier le body (pour afficher les nouvelles valeurs)
- set modifyBook → false (fermer la pop-up)
Récapitulatif des concepts clés
| Concept | Utilisation |
|---|---|
| Store | Stockage centralisé des données frontend |
| Template (for) | Itérer sur un tableau pour afficher plusieurs éléments |
| Template (if) | Afficher conditionnellement des éléments |
| Model | Liaison bidirectionnelle entre input et variable |
| Get property | Extraire une propriété d'un objet |
| Set property | Modifier une propriété d'un objet ou store |
| Spread | Déstructurer toutes les propriétés d'un objet |
| Variables de page | Stocker des valeurs temporaires (inputs, états) |
| onMounted | Exécuter du code au chargement de la page |
Architecture des données
Page Variables
├─ title (string) - input temporaire
├─ author (string) - input temporaire
├─ createBook (boolean) - contrôle pop-up création
└─ modifyBook (boolean) - contrôle pop-up modification
Book Store
├─ books (array) - liste complète
└─ selectedBook (object) - livre actuellement sélectionné
Conseils pratiques
- Toujours nommer clairement les variables et composants
- Utiliser le mode "All" dans les templates pour voir tous les éléments en développement
- Tester avec Ctrl+Espace pour visualiser les données à chaque étape
- Les pop-ups se ferment automatiquement en cliquant à l'extérieur
- Utiliser les tokens du store pour accéder aux données imbriquées
- Réinitialiser selectedBook après suppression pour éviter les erreurs
- Le model crée une liaison bidirectionnelle (changement dans l'input = changement dans la variable)
- Penser à fermer les pop-ups après les actions (create/modify)
- Utiliser spread pour déstructurer facilement les objets complexes