|
1 | | -import DsfrFollow from './DsfrFollow.vue' |
| 1 | +import type { Meta, StoryObj } from '@storybook/vue3' |
| 2 | + |
2 | 3 | import DsfrNewsLetter from './DsfrNewsLetter.vue' |
3 | 4 |
|
4 | | -/** |
5 | | - * [Voir quand l’utiliser sur la documentation du DSFR](https://www.systeme-de-design.gouv.fr/version-courante/fr/composants/lettre-d-information-et-reseaux-sociaux) |
6 | | - */ |
7 | | -export default { |
| 5 | +const meta = { |
8 | 6 | component: DsfrNewsLetter, |
9 | | - title: 'Composants/DsfrNewsletter', |
10 | | - tags: ['réseaux sociaux'], |
| 7 | + title: 'Composants/DsfrNewsLetter', |
11 | 8 | argTypes: { |
12 | 9 | title: { |
13 | 10 | control: 'text', |
14 | | - description: 'Titre de la newsletter', |
| 11 | + description: 'Titre de la lettre d’information', |
15 | 12 | }, |
16 | 13 | description: { |
17 | 14 | control: 'text', |
18 | | - description: 'Description de la newsletter', |
| 15 | + description: 'Description de la lettre d’information', |
19 | 16 | }, |
20 | 17 | email: { |
21 | 18 | control: 'text', |
22 | | - description: 'V-model de l’adresse électronique', |
| 19 | + description: 'Adresse électronique de l’utilisateur', |
23 | 20 | }, |
24 | 21 | labelEmail: { |
25 | 22 | control: 'text', |
26 | | - description: 'Label du champ pour renseigner l’adresse électronique', |
| 23 | + description: 'Label du champ pour l’adresse électronique', |
27 | 24 | }, |
28 | | - placeHolder: { |
| 25 | + placeholder: { |
29 | 26 | control: 'text', |
30 | | - description: |
31 | | - 'Placeholder du champ pour renseigner l’adresse électronique', |
| 27 | + description: 'Placeholder du champ pour l’adresse électronique', |
32 | 28 | }, |
33 | 29 | hintText: { |
34 | 30 | control: 'text', |
35 | | - description: |
36 | | - 'Explication à afficher sous le champ pour renseigner l’adresse électronique', |
| 31 | + description: 'Indice à afficher sous le champ de l’adresse électronique', |
37 | 32 | }, |
38 | 33 | buttonText: { |
39 | 34 | control: 'text', |
40 | | - description: 'S’abonner', |
| 35 | + description: 'Texte du bouton d’abonnement', |
41 | 36 | }, |
42 | 37 | buttonTitle: { |
43 | 38 | control: 'text', |
44 | | - description: 'Contenu de l’attribut `title` du bouton d’abonnement', |
| 39 | + description: 'Titre du bouton d’abonnement', |
45 | 40 | }, |
46 | | - buttonAction: { action: 'clicked' }, |
47 | 41 | onlyCallout: { |
48 | 42 | control: 'boolean', |
49 | | - description: |
50 | | - 'Newsletter simplifiée avec seulement un bouton, le formulaire sera masqué', |
| 43 | + description: 'Afficher uniquement un bouton sans champ de saisie', |
| 44 | + }, |
| 45 | + error: { |
| 46 | + control: 'text', |
| 47 | + description: 'Message d’erreur à afficher', |
| 48 | + }, |
| 49 | + inputTitle: { |
| 50 | + control: 'text', |
| 51 | + description: 'Titre de l’input (attribut `title`)', |
| 52 | + }, |
| 53 | + onSubmit: { |
| 54 | + action: 'submit', |
| 55 | + }, |
| 56 | + 'button-action': { |
| 57 | + action: 'button-action', |
51 | 58 | }, |
52 | 59 | }, |
53 | | -} |
54 | | - |
55 | | -export const NewsletterSimple = (args) => ({ |
56 | | - components: { |
57 | | - DsfrNewsLetter, |
58 | | - DsfrFollow, |
59 | | - }, |
60 | | - |
61 | | - data () { |
62 | | - return { |
63 | | - ...args, |
64 | | - } |
65 | | - }, |
66 | | - |
67 | | - template: ` |
68 | | - <DsfrFollow> |
69 | | - <div class="fr-col-12"> |
70 | | - <DsfrNewsLetter |
71 | | - :title="title" |
72 | | - :description="description" |
73 | | - v-model:email="email" |
74 | | - :labelEmail="labelEmail" |
75 | | - :inputTitle="inputTitle" |
76 | | - :placeholder="placeholder" |
77 | | - :hintText="hintText" |
78 | | - :buttonText="buttonText" |
79 | | - :buttonTitle="buttonTitle" |
80 | | - /> |
81 | | - </div> |
82 | | - </DsfrFollow> |
83 | | - `, |
84 | | -}) |
85 | | -NewsletterSimple.args = { |
86 | | - title: 'Titre de la lettre d’information', |
87 | | - description: 'Description de la lettre d’information', |
88 | | - email: 'email.super@chouette.fr', |
89 | | - labelEmail: 'Votre adresse électronique', |
90 | | - inputTitle: 'Adresse électronique', |
91 | | - placeholder: 'james.bond@mi6.gov.uk', |
92 | | - hintText: |
93 | | - 'En renseignant votre adresse électronique, vous acceptez de recevoir nos actualités par courriel. Vous pouvez vous désinscrire à tout moment à l’aide des liens de désinscription ou en nous contactant.', |
94 | | - buttonText: 'S’abonner', |
95 | | - buttonTitle: 'Titre du bouton (attribut `title`) de la balise `button`', |
96 | | -} |
97 | | - |
98 | | -export const NewsletterAvecErreur = (args) => ({ |
99 | | - components: { |
100 | | - DsfrNewsLetter, |
101 | | - DsfrFollow, |
102 | | - }, |
| 60 | +} satisfies Meta<typeof DsfrNewsLetter> |
103 | 61 |
|
104 | | - data () { |
105 | | - return { |
106 | | - ...args, |
107 | | - } |
108 | | - }, |
| 62 | +export default meta |
| 63 | +type Story = StoryObj<typeof meta> |
109 | 64 |
|
110 | | - watch: { |
111 | | - email (newValue) { |
112 | | - if ( |
113 | | - // eslint-disable-next-line regexp/no-unused-capturing-group |
114 | | - /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-z\-0-9]+\.)+[a-z]{2,}))$/i.test( |
115 | | - newValue, |
116 | | - ) |
117 | | - ) { |
118 | | - this.error = '' |
119 | | - return |
120 | | - } |
121 | | - this.error = |
122 | | - 'Le format de l’adresse electronique saisie n’est pas valide. Le format attendu est : nom@example.org' |
| 65 | +export const LettreDInformationSimple: Story = { |
| 66 | + render: (args) => ({ |
| 67 | + components: { DsfrNewsLetter }, |
| 68 | + setup () { |
| 69 | + return { args } |
123 | 70 | }, |
| 71 | + template: ` |
| 72 | + <DsfrNewsLetter v-bind="args" /> |
| 73 | + `, |
| 74 | + }), |
| 75 | + args: { |
| 76 | + title: 'Abonnez-vous à notre lettre d’information', |
| 77 | + description: |
| 78 | + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas varius tortor nibh, sit amet tempor nibh finibus et.', |
| 79 | + email: '', |
| 80 | + labelEmail: 'Votre adresse électronique (ex. : prenom.nom@example.com)', |
| 81 | + placeholder: 'prenom.nom@example.com', |
| 82 | + hintText: 'Texte de politique de confidentialité', |
| 83 | + buttonText: 'S’abonner', |
| 84 | + buttonTitle: 'S’abonner à notre lettre d’information', |
| 85 | + onlyCallout: false, |
| 86 | + error: '', |
| 87 | + inputTitle: 'Titre de l’input', |
124 | 88 | }, |
125 | | - |
126 | | - template: ` |
127 | | - <DsfrFollow> |
128 | | - <div class="fr-col-12"> |
129 | | - <DsfrNewsLetter |
130 | | - :title="title" |
131 | | - :description="description" |
132 | | - :error="error" |
133 | | - v-model:email="email" |
134 | | - :labelEmail="labelEmail" |
135 | | - :inputTitle="inputTitle" |
136 | | - :placeholder="placeholder" |
137 | | - :hintText="hintText" |
138 | | - :buttonText="buttonText" |
139 | | - :buttonTitle="buttonTitle" |
140 | | - /> |
141 | | - </div> |
142 | | - </DsfrFollow> |
143 | | - `, |
144 | | -}) |
145 | | - |
146 | | -NewsletterAvecErreur.args = { |
147 | | - title: 'Titre de la lettre d’information', |
148 | | - description: 'Description de la lettre d’information', |
149 | | - email: 'email.superchouette.fr', |
150 | | - error: |
151 | | - 'Le format de l’adresse electronique saisie n’est pas valide. Le format attendu est : nom@example.org', |
152 | | - labelEmail: 'Votre adresse électronique', |
153 | | - inputTitle: 'Adresse électronique', |
154 | | - placeholder: 'james.bond@mi6.gov.uk', |
155 | | - hintText: |
156 | | - 'En renseignant votre adresse électronique, vous acceptez de recevoir nos actualités par courriel. Vous pouvez vous désinscrire à tout moment à l’aide des liens de désinscription ou en nous contactant.', |
157 | | - buttonText: 'S’abonner', |
158 | | - buttonTitle: 'Titre du bouton (attribut `title`) de la balise `button`', |
159 | 89 | } |
160 | 90 |
|
161 | | -export const NewsletterMiseEnAvant = (args) => ({ |
162 | | - components: { |
163 | | - DsfrNewsLetter, |
164 | | - DsfrFollow, |
| 91 | +export const LettreDInformationSimplifiee: Story = { |
| 92 | + args: { |
| 93 | + ...LettreDInformationSimple.args, |
| 94 | + onlyCallout: true, |
165 | 95 | }, |
| 96 | +} |
166 | 97 |
|
167 | | - data () { |
168 | | - return { |
169 | | - ...args, |
170 | | - } |
| 98 | +export const LettreDInformationAvecErreur: Story = { |
| 99 | + args: { |
| 100 | + ...LettreDInformationSimple.args, |
| 101 | + error: 'Message d’erreur', |
171 | 102 | }, |
172 | | - |
173 | | - template: ` |
174 | | - <DsfrFollow> |
175 | | - <div class="fr-col-12"> |
176 | | - <DsfrNewsLetter |
177 | | - :title="title" |
178 | | - :description="description" |
179 | | - v-model:email="email" |
180 | | - :labelEmail="labelEmail" |
181 | | - :inputTitle="inputTitle" |
182 | | - :placeholder="placeholder" |
183 | | - :hintText="hintText" |
184 | | - :buttonText="buttonText" |
185 | | - :buttonTitle="buttonTitle" |
186 | | - :buttonAction="buttonAction" |
187 | | - :onlyCallout="onlyCallout" |
188 | | - /> |
189 | | - </div> |
190 | | - </DsfrFollow> |
191 | | - `, |
192 | | -}) |
193 | | -NewsletterMiseEnAvant.args = { |
194 | | - title: 'Titre de la lettre d’information', |
195 | | - description: 'Description de la lettre d’information', |
196 | | - email: '', |
197 | | - labelEmail: '', |
198 | | - inputTitle: '', |
199 | | - placeholder: '', |
200 | | - hintText: '', |
201 | | - buttonText: 'S’abonner', |
202 | | - buttonTitle: 'Titre du bouton (attribut `title`) de la balise `button`', |
203 | | - buttonAction: () => undefined, |
204 | | - onlyCallout: true, |
205 | 103 | } |
0 commit comments