Ajouter une tâche

Pour ajouter une tâche, nous allons :

  • Ajouter un bouton flottant en bas de la page PageTaches.vue

  • Ajouter une boîte de dialogue qui s'affichera au click du nouveau bouton.

  • Créer un composant TaskDialog.vue qui contiendra le formulaire d'ajout et sera intégrer à la boîte de dialogue.

Bouton flottant

Utiliser le code ci-dessous pour le bouton:

Boîte de dialogue

Nous allons utiliser un composant pour la boite de dialogue et non un plugin.

Récupérer le code de la dialog Basic et l'ajouter après le bouton flottant que nous venons de créer </q-page-sticky>.

La dialog utilise une directive v-model pour s'afficher ou se cacher :

Nous allons créer une référence, ref, afficherTaskDialog initialisée à false.

Puis, lier cette donnée au v-model de la dialog.

Finalement, au clic du bouton "Ajouter" changer la valeur de afficherTaskDialog à true.

On ajouter encore l'attribut persistent à <q-dialog> pour quelle ne se ferme pas si l'utilisateur clique à coté de la dialog.

Composant TaskDialog.vue

Créer le composant src/components/TaskDialog.vue et y couper-coller l'élément <q-card> de la dialog.

Importer le composant dans PageTaches.vue

Injecter le composant TaskDialog.vue à la page PageTaches.vue. Le nom de la balise contenant un tiret, il faut le mettre sous forme de chaine de caractère en l'entourant de guillemets simples.

Ajouter le composant <TaskDialog /> à la dialog.

Le composant s'affiche dans la dialog.

Customisation de la boîte de dialogue

Changer le titre de la dialog

Bouton de fermeture

Ajout d'un bouton de fermeture dans le coin supérieur droite de la dialog. On va utiliser le même style de bouton que pour la suppression. On y ajoute l'attibut dense et l'icône close.

Affichage en ligne

Pour afficher le tire et le bouton sur la même ligne, on ajouter la classe CSS .row à la section.

Gestion des esapces

Le titre et le bouton s'affichent sur la même ligne, mais sont trop proches. Pour créer un espace entre le titre et le bouton on va utiliser un composant <q-space /> .

Ce composant est spécialement conçu pour créer des espaces entre les éléments des lignes utilisant la technique CSS Flexboxarrow-up-right.

Fermeture

Pour que le bouton ferme la dialog, on va utiliser la directive Quasar v-close-popup, très pratique et facile à utiliser pour fermer tous les éléments flottants.

Changer texte du bouton

Pour terminer, on renomme le bouton OK en Ajouter.

Résultat

Champs du formulaire

Notre formulaire contiendra les champs suivants :

  • Champ texte obligatoire : pour le nom de la tâche :

  • Date Piker optionnel : pour la date d'échéance

  • Time Piker optionnel : optionnel, pour l'heure d'échéance

Objet tache du composant

Les champs du formulaire seront directement liés aux propriétés de l'objet tache du composant.

Commençons par créer l'objet tache dans notre composant TaskDialog.vue.

Champ texte pour le nom

Copier la version outlined des exemples, à la place du texte de la dialog.

Renommer le label et faire le lien avec la propriété nom de l'objet tache.

Date Picker

Copier la version With QInput et la coller après le <q-input> du nom de la tâche.

Retirer les attributs mask et :rules, remplacer filled par outlined pour avoir le même style que notre premier champ, et ajouter label="Date".

Retirer la div pour ne garder que l'élément de base.

Lier les deux v-model avec tache.dateFin.

Changer le format de la date pour <q-date> avec l'attribut mask="D.M.YYYY".

Time Picker

Copier la version With QInput et la coller après le Date Picker.

Retirer les attributs mask et :rules, remplacer filled par outlined et ajouter label="Heure".

Retirer la div pour ne garder que la structure de base de q-time

Lier les deux v-models avec tache.heureFin

Boutons d'action

Afin de valider ou annuler le choix de l'heure, nous allons y ajouter des boutons.

Pour ce faire il faut créer une donnée pour y stocker l'heure de manière temporaire. Créer un donnée heureTemp.

Ensuite remplacer le <q-popup-proxy> actuel par le code suivant.

  • 2 : Avant le chargement de la fenêtre de sélection de l'heure, on initialise heureTemp avec l'heure actuelle de la tâche.

  • 6 : L'élément <q-time> est lié à la donnée heureTemp avec la directive v-model.

  • 13 : Quand on clique sur le bouton OK, l'heure temporaire est affectée à la tâche.

Définir la langue pour Quasar

Actuellement, le choix de l'heure se fait au format anglo-saxon (AM / PM).

Pour activer le format 24H, nous pouvons le forcer en ajoutant l'attribut format24h à <q-time> ou en paramétrant le Quasar Language Packs.

Cette variant à l'avantage de définir les réglages pour tous les composants de l'application.

Pour changer la langue modifier la ligne de code suivante dans le fichier quasar.conf.js à la racine du projet.

Non seulement le choix de l'heure est maintenant au format 24H, mais en plus, le calendrier est en français 🇫🇷

Un peu de style

Pour aérer les éléments du formulaire, ajouter une marge supérieure avec le helper class="q-mt-sm" au Date Picker et au Time Picker.

On va également augmenter la largeur max de la dialog en créer un style pour <q-card>.

circle-info

Quasar applique à ses composant une classe CSS portant le nom du composant.

<q-card> devient <div class="q-card">

Résultat

Validation

La date et l'heure sont optionnels, mais le nom de la tâche, lui est obligatoire.

Ajoutons cette règle en copiant l'attribut :rules de l'exemple ci-après :

Envoi du formulaire

Première chose, créer une méthode formSubmit() qui sera appelée lors de l'envoi du formulaire. Pour le moment cette méthode affiche une simple alert.

Ensuite il faut créer un formulaire <q-form> qui englobera la section qui contient les champs et celle qui contient le bouton.

Appeler la méthode formSubmit() à l'envoi du formulaire avec @submit.

Définir le bouton de la dialog comme bouton d'envoi type="submit".

Supprimer l'attribut v-close-popup du bouton pour éviter la fermeture de la dialog.

On en profite pour supprimer l'attribut flat du bouton pour le rendre plus visible.

Lors du clic sur le bouton Ajouter, le formulaire valide la saisie :

  • Saisie OK : le formulaire est envoyé et notre méthode formSubmit est appelée.

  • Saisie KO : les messages d’erreurs s'affichent et l'envoi est annulé.

Fermeture de la dialog

Après l'envoi du formulaire, il faut fermer la dialog. Comme la dialog est créée dans un composant parent, il faudra émettre une événement pour demander au parent de fermer la dialog.

Émet un événement 'fermer' dans la méthode formSubmit de TaskDialog.vue.

Ajout de l'écoute de l'événement 'fermer' dans le parent PageTaches.vue et fermeture de la dialog.

La dialog se ferme après validation de la fenêtre d'alerte.

Ajout de la tâche au magasin

Pour ajouter la tâche à notre magasin Pinia, nous allons :

  • Créer une action ajouterTache qui va

    • Créer un id pour la nouvelle tâche

    • Ajouter la tache au tableau

  • Appeler l'action ajouterTache et lui passer la nouvelle tâche.

Action

Générer un id unique

Pour notre applications, nous allons simplement récupérer l'id le plus élevé du tableau des taches et l'incrémenter de 1.

Mais si vous devez générer un id unique, Quasar peut vous aider.

Dans la section "Quasar Utils" du menu de la doc Quasar, vous trouverez des objets utilitaires (Dates, couleurs, scrolling, ... ) dont un pour générer des id uniques :

Pour récupérer l'id MAX du tableau nous utilisons la méthode map()arrow-up-right et l'affectation par décompositionarrow-up-right.

triangle-exclamation

Mappage et appel

Il ne reste plus qu'à mapper et appeler l'action ajouterTache dans notre composant TaskDialog.vue.

Résultat

Mis à jour

Ce contenu vous a-t-il été utile ?