Le Composer est un composant unifié de Dokos qui permet aux utilisateurs de rédiger des emails et des commentaires de manière intuitive, avec une interface moderne et des fonctionnalités avancées comme la gestion des pièces jointes, des destinataires, et des extensions personnalisées.
Le Composer offre une interface cohérente pour :
EmailComposer)CommentComposer)Les deux modes partagent des fonctionnalités communes comme l'éditeur de texte riche, la gestion des pièces jointes, et la personnalisation de l'en-tête.
Le Composer permet de gérer facilement les destinataires des emails avec des champs dédiés pour :
To)Cc)Bcc)Chaque champ est configurable via des props pour afficher ou masquer les options selon les besoins.
Le Composer prend en charge la gestion des pièces jointes avec les fonctionnalités suivantes :
Le Composer permet d'héberger des extensions Tiptap pour personnaliser l'éditeur de texte riche. Ces extensions sont ajoutées après les extensions par défaut de RichTextKit, ce qui permet de redéfinir les comportements par défaut.
Dans cet exemple, le Composer est utilisé pour répondre à un ticket client. L'interface affiche les onglets Email et Commentaire, ainsi qu'une zone de réponse citée.
<template>
<EmailComposer
show-from
show-subject
v-model:to="to"
v-model:cc="cc"
@submit="onSend"
/>
</template>
Pour une réponse rapide, le Composer peut être intégré directement dans l'en-tête d'un document, comme un ticket ou une tâche.
<template>
<CommentComposer
placeholder="Ajoutez un commentaire rapide..."
@submit="onCommentSubmit"
/>
</template>
| Prop | Type | Description | Valeur par défaut |
|---|---|---|---|
extensions | Array | Extensions Tiptap à ajouter à l'éditeur | [] |
maxAttachments | Number | Nombre maximal de pièces jointes autorisées | 10 |
| Prop | Type | Description | Valeur par défaut |
|---|---|---|---|
show-from | Boolean | Affiche le champ "De" | false |
show-subject | Boolean | Affiche le champ "Sujet" | false |
show-to | Boolean | Affiche le champ "À" | true |
show-cc | Boolean | Affiche le champ "CC" | true |
show-bcc | Boolean | Affiche le champ "CCI" | true |
v-model:to | Array | Liste des destinataires pour le champ "À" | [] |
v-model:cc | Array | Liste des destinataires pour le champ "CC" | [] |
v-model:bcc | Array | Liste des destinataires pour le champ "CCI" | [] |
| Événement | Description |
|---|---|
@submit | Déclenché lorsque l'utilisateur envoie l'email. Le payload contient les champs to, cc, bcc, subject, body, et attachments. |
<template>
<EmailComposer
show-from
show-subject
:show-bcc="false"
v-model:to="toRecipients"
v-model:cc="ccRecipients"
@submit="handleEmailSubmit"
/>
</template>
<script>
export default {
data() {
return {
toRecipients: [{ email: 'client@exemple.com', label: 'Maison Verte SARL' }],
ccRecipients: [{ email: 'collaborateur@exemple.com', label: 'Bureau Moderne' }]
}
},
methods: {
handleEmailSubmit(payload) {
console.log('Email envoyé:', payload);
}
}
}
</script>
| Prop | Type | Description | Valeur par défaut |
|---|---|---|---|
placeholder | String | Texte d'aide affiché dans l'éditeur | "Ajoutez un commentaire..." |
| Événement | Description |
|---|---|
@submit | Déclenché lorsque l'utilisateur envoie le commentaire. Le payload contient les champs body et attachments. |
<template>
<CommentComposer
placeholder="Partagez vos idées ici..."
@submit="handleCommentSubmit"
/>
</template>
<script>
export default {
methods: {
handleCommentSubmit(payload) {
console.log('Commentaire envoyé:', payload);
}
}
}
</script>
Si vous utilisiez l'ancienne API du EmailComposer, voici comment migrer vers la nouvelle version :
<EmailComposer
:header-fields="['from', 'subject', 'to', 'cc']"
v-model:recipients="recipients"
@submit="onSend"
/>
<EmailComposer
show-from
show-subject
v-model:to="recipients.to"
v-model:cc="recipients.cc"
@submit="onSend"
/>
Le payload de l'événement @submit a également été aplati :
{
"recipients": {
"to": [...],
"cc": [...],
"bcc": [...]
}
}
{
"to": [...],
"cc": [...],
"bcc": [...]
}
Vous pouvez personnaliser l'éditeur de texte riche en ajoutant des extensions Tiptap via la prop extensions. Ces extensions sont ajoutées après les extensions par défaut de RichTextKit, ce qui permet de redéfinir les comportements par défaut.
<template>
<EmailComposer :extensions="customExtensions" />
</template>
<script>
import { Extension } from '@tiptap/core';
const CustomHighlight = Extension.create({
name: 'customHighlight',
addCommands() {
return {
setHighlight: () => ({ commands }) => {
return commands.setMark('highlight');
}
}
}
});
export default {
data() {
return {
customExtensions: [CustomHighlight]
}
}
}
</script>
Utilisez la prop maxAttachments pour limiter le nombre de pièces jointes autorisées :
<EmailComposer :max-attachments="5" />
Scénario : Un utilisateur répond à un ticket client depuis le module Support de Dokos.
client@maisonverte.com (Maison Verte SARL)logistique@bureaumoderne.com (Bureau Moderne)Suivi commande #CMD-2023-045Scénario : Un utilisateur ajoute un commentaire rapide depuis une fiche Client.
« Le client a demandé un suivi pour la commande #CMD-2023-045. »Utilisez les props show-to, show-cc, ou show-bcc pour masquer les champs que vous ne souhaitez pas afficher. Par exemple :
<EmailComposer :show-bcc="false" />
Utilisez la prop maxAttachments pour définir une limite. Par exemple, pour autoriser seulement 5 pièces jointes :
<EmailComposer :max-attachments="5" />
Vous pouvez ajouter des extensions Tiptap via la prop extensions. Ces extensions seront ajoutées après les extensions par défaut de RichTextKit, ce qui vous permet de redéfinir les comportements par défaut.
Si vous utilisiez l'ancienne API du EmailComposer, vous devez migrer vers la nouvelle API. Consultez la section Migration depuis l'ancienne API pour plus de détails.
Cette documentation s'applique à la version 2.0 du Composer. Pour les versions antérieures, consultez la documentation correspondante.