@cnamts/synapse 0.0.11-alpha → 0.0.12-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/design-system-v3.js +3878 -3189
  2. package/dist/design-system-v3.umd.cjs +1 -1
  3. package/dist/src/components/Amelipro/types/languages.d.ts +6 -0
  4. package/dist/src/components/Amelipro/types/types.d.ts +65 -0
  5. package/dist/src/components/CookieBanner/CookieBanner.d.ts +1 -1
  6. package/dist/src/components/Customs/SyInputSelect/SyInputSelect.d.ts +2 -0
  7. package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +29 -23
  8. package/dist/src/components/Customs/SyTextField/types.d.ts +1 -0
  9. package/dist/src/components/DatePicker/DatePicker.d.ts +70 -59
  10. package/dist/src/components/DatePicker/DateTextInput.d.ts +67 -56
  11. package/dist/src/components/ErrorPage/ErrorPage.d.ts +1 -1
  12. package/dist/src/components/FileList/FileList.d.ts +1 -0
  13. package/dist/src/components/FileList/UploadItem/UploadItem.d.ts +1 -1
  14. package/dist/src/components/FilterSideBar/FilterSideBar.d.ts +31 -0
  15. package/dist/src/components/FilterSideBar/locales.d.ts +7 -0
  16. package/dist/src/components/FilterSideBar/tests/FilterSideBar.spec.d.ts +1 -0
  17. package/dist/src/components/LangBtn/LangBtn.d.ts +2 -2
  18. package/dist/src/components/NirField/NirField.d.ts +940 -0
  19. package/dist/src/components/NotificationBar/NotificationBar.d.ts +1 -1
  20. package/dist/src/components/PasswordField/PasswordField.d.ts +40 -8
  21. package/dist/src/components/PeriodField/PeriodField.d.ts +142 -120
  22. package/dist/src/components/PhoneField/PhoneField.d.ts +11 -2
  23. package/dist/src/components/RatingPicker/EmotionPicker/EmotionPicker.d.ts +1 -1
  24. package/dist/src/components/RatingPicker/NumberPicker/NumberPicker.d.ts +1 -1
  25. package/dist/src/components/RatingPicker/StarsPicker/StarsPicker.d.ts +1 -1
  26. package/dist/src/components/UploadWorkflow/config.d.ts +29 -0
  27. package/dist/src/components/UploadWorkflow/locales.d.ts +7 -0
  28. package/dist/src/components/UploadWorkflow/tests/UploadWorkflow.spec.d.ts +1 -0
  29. package/dist/src/components/UploadWorkflow/types.d.ts +19 -0
  30. package/dist/src/components/UploadWorkflow/useFileList.d.ts +10 -0
  31. package/dist/src/components/UploadWorkflow/useFileUploadJourney.d.ts +9 -0
  32. package/dist/src/components/index.d.ts +2 -0
  33. package/dist/src/composables/rules/useFieldValidation.d.ts +1 -0
  34. package/dist/src/composables/validation/tests/useValidation.spec.d.ts +1 -0
  35. package/dist/src/composables/validation/useValidation.d.ts +39 -0
  36. package/dist/src/designTokens/index.d.ts +3 -1
  37. package/dist/src/vuetifyConfig.d.ts +81 -0
  38. package/dist/style.css +1 -1
  39. package/package.json +1 -1
  40. package/src/assets/_elevations.scss +89 -0
  41. package/src/assets/_fonts.scss +6 -0
  42. package/src/assets/_radius.scss +86 -0
  43. package/src/assets/_spacers.scss +149 -0
  44. package/src/assets/settings.scss +7 -3
  45. package/src/assets/tokens.scss +32 -29
  46. package/src/components/Amelipro/types/languages.d.ts +6 -0
  47. package/src/components/Amelipro/types/types.d.ts +65 -0
  48. package/src/components/Customs/SyInputSelect/SyInputSelect.stories.ts +65 -0
  49. package/src/components/Customs/SyInputSelect/SyInputSelect.vue +13 -3
  50. package/src/components/Customs/SySelect/SySelect.stories.ts +88 -5
  51. package/src/components/Customs/SySelect/SySelect.vue +36 -10
  52. package/src/components/Customs/SySelect/tests/SySelect.spec.ts +135 -2
  53. package/src/components/Customs/SyTextField/SyTextField.stories.ts +576 -85
  54. package/src/components/Customs/SyTextField/SyTextField.vue +132 -104
  55. package/src/components/Customs/SyTextField/tests/SyTextField.spec.ts +190 -38
  56. package/src/components/Customs/SyTextField/types.d.ts +1 -0
  57. package/src/components/DatePicker/DatePicker.vue +405 -137
  58. package/src/components/DatePicker/DateTextInput.vue +15 -0
  59. package/src/components/DatePicker/tests/DatePicker.spec.ts +8 -15
  60. package/src/components/FileList/FileList.vue +2 -1
  61. package/src/components/FileList/UploadItem/UploadItem.vue +10 -0
  62. package/src/components/FileUpload/FileUpload.stories.ts +84 -0
  63. package/src/components/FileUpload/FileUpload.vue +1 -0
  64. package/src/components/FileUpload/tests/FileUpload.spec.ts +4 -4
  65. package/src/components/FilterInline/FilterInline.mdx +180 -34
  66. package/src/components/FilterInline/FilterInline.stories.ts +363 -6
  67. package/src/components/FilterSideBar/FilterSideBar.mdx +237 -0
  68. package/src/components/FilterSideBar/FilterSideBar.stories.ts +798 -0
  69. package/src/components/FilterSideBar/FilterSideBar.vue +193 -0
  70. package/src/components/FilterSideBar/locales.ts +8 -0
  71. package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +305 -0
  72. package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +39 -0
  73. package/src/components/HeaderBar/Usages.mdx +1 -1
  74. package/src/components/NirField/NirField.stories.ts +573 -29
  75. package/src/components/NirField/NirField.vue +397 -359
  76. package/src/components/NirField/tests/NirField.spec.ts +88 -52
  77. package/src/components/NirField/tests//342/200/257dataset/342/200/257.md +12 -0
  78. package/src/components/NotificationBar/Accessibilite.stories.ts +4 -0
  79. package/src/components/NotificationBar/NotificationBar.stories.ts +18 -13
  80. package/src/components/PasswordField/PasswordField.mdx +129 -47
  81. package/src/components/PasswordField/PasswordField.stories.ts +924 -120
  82. package/src/components/PasswordField/PasswordField.vue +209 -99
  83. package/src/components/PasswordField/tests/PasswordField.spec.ts +138 -9
  84. package/src/components/PeriodField/PeriodField.vue +55 -54
  85. package/src/components/PhoneField/PhoneField.stories.ts +69 -0
  86. package/src/components/PhoneField/PhoneField.vue +3 -0
  87. package/src/components/PhoneField/indicatifs.ts +1 -1
  88. package/src/components/UploadWorkflow/UploadWorkflow.mdx +75 -0
  89. package/src/components/UploadWorkflow/UploadWorkflow.stories.ts +943 -0
  90. package/src/components/UploadWorkflow/UploadWorkflow.vue +230 -0
  91. package/src/components/UploadWorkflow/config.ts +29 -0
  92. package/src/components/UploadWorkflow/locales.ts +8 -0
  93. package/src/components/UploadWorkflow/tests/UploadWorkflow.spec.ts +257 -0
  94. package/src/components/UploadWorkflow/tests/__snapshots__/UploadWorkflow.spec.ts.snap +54 -0
  95. package/src/components/UploadWorkflow/types.ts +21 -0
  96. package/src/components/UploadWorkflow/useFileList.ts +84 -0
  97. package/src/components/UploadWorkflow/useFileUploadJourney.ts +18 -0
  98. package/src/components/index.ts +2 -0
  99. package/src/composables/rules/useFieldValidation.ts +5 -2
  100. package/src/composables/validation/tests/useValidation.spec.ts +154 -0
  101. package/src/composables/validation/useValidation.ts +165 -0
  102. package/src/designTokens/index.ts +4 -0
  103. package/src/stories/Demarrer/Accueil.mdx +1 -1
  104. package/src/stories/DesignTokens/ThemePA.mdx +4 -30
  105. package/src/stories/GuideDuDev/UtiliserLesRules.mdx +319 -76
  106. package/src/stories/GuideDuDev/moduleDeNotification.mdx +1 -1
  107. package/src/vuetifyConfig.ts +61 -0
  108. package/src/composables/useFilterable/__snapshots__/useFilterable.spec.ts.snap +0 -3
@@ -0,0 +1,798 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import FilterSideBar from './FilterSideBar.vue'
3
+ import { fn } from '@storybook/test'
4
+ import { VDivider, VSelect, VTextField } from 'vuetify/components'
5
+ import PeriodField from '../PeriodField/PeriodField.vue'
6
+ import SearchListField from '../SearchListField/SearchListField.vue'
7
+ import { ref } from 'vue'
8
+ import FilterInline from '../FilterInline/FilterInline.vue'
9
+ import RangeField from '../RangeField/RangeField.vue'
10
+
11
+ const meta = {
12
+ title: 'Composants/Filtres/FiltersSideBar',
13
+ component: FilterSideBar,
14
+
15
+ argTypes: {
16
+ 'modelValue': {
17
+ description: 'Valeur des filtres',
18
+ control: {
19
+ type: 'object',
20
+ },
21
+ table: {
22
+ category: 'props',
23
+ type: {
24
+ summary: 'array',
25
+ detail: `{
26
+ name: string
27
+ value?: unknown
28
+ formatChip?: (value: unknown) => ChipItem[]
29
+ chipOverflowLimit?: number
30
+ title?: string
31
+ }[]`,
32
+ },
33
+ defaultValue: {
34
+ summary: '[]',
35
+ },
36
+ },
37
+ },
38
+ 'locales': {
39
+ description: 'Traductions',
40
+ control: {
41
+ type: 'object',
42
+ },
43
+ table: {
44
+ category: 'props',
45
+ type: {
46
+ summary: 'Record<string, Function | string>',
47
+ },
48
+ defaultValue: {
49
+ summary: 'locales',
50
+ detail: `{
51
+ filterBtnLabel: 'Filtres',
52
+ badgeLabel: (count: number): string =>
53
+ \`\${count} filtre\${count > 1 ? 's' : ''}\`,
54
+ reset: 'Réinitialiser',
55
+ close: 'Fermer',
56
+ apply: 'Appliquer',
57
+ }`,
58
+ },
59
+ },
60
+ },
61
+ 'onUpdate:modelValue': {
62
+ description: 'Événement déclenché lors de la mise à jour des filtres',
63
+ control: {
64
+ type: undefined,
65
+ },
66
+ table: {
67
+ category: 'events',
68
+ type: {
69
+ summary: 'array',
70
+ detail: `{
71
+ name: string
72
+ value?: unknown
73
+ formatChip?: (value: unknown) => ChipItem[]
74
+ chipOverflowLimit?: number
75
+ title?: string
76
+ }[]`,
77
+ },
78
+ },
79
+ },
80
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
81
+ // @ts-ignore - storybook can't infer dynamic slot name
82
+ '${filterName}': {
83
+ description: 'Slot pour les filtres. <br>Le nom de chaque slot correspond au nom (`name`) du filtre. <br>Le paramètre du slot `props` est un objet contenant les props à passer au filtre.',
84
+ table: {
85
+ category: 'slots',
86
+ type: {
87
+ summary: '{ props: Object }',
88
+ },
89
+ },
90
+ },
91
+ },
92
+ parameters: {
93
+ layout: 'fullscreen',
94
+ controls: {
95
+ exclude: ['update:modelValue', '`${formatFilterName(filter.name)}`'],
96
+ },
97
+ },
98
+ } satisfies Meta<typeof FilterSideBar>
99
+
100
+ export default meta
101
+
102
+ type Story = StoryObj<typeof FilterSideBar>
103
+
104
+ export const Default: Story = {
105
+ args: {
106
+ 'onUpdate:modelValue': fn(),
107
+ },
108
+ decorators: [
109
+ () => ({
110
+ template: `
111
+ <VApp style="height: 500px; overflow-y: hidden;">
112
+ <div class="pa-4">
113
+ <story />
114
+ </div>
115
+ </VApp>
116
+ `,
117
+ }),
118
+ ],
119
+ render: args => ({
120
+ components: { FilterSideBar, VTextField, VSelect, PeriodField, SearchListField },
121
+ setup() {
122
+ const filters = ref([
123
+ {
124
+ name: 'name',
125
+ title: 'Identité',
126
+ },
127
+ {
128
+ name: 'folder',
129
+ title: 'Type de dossier',
130
+ },
131
+ {
132
+ name: 'period',
133
+ title: 'Période',
134
+ },
135
+ {
136
+ name: 'profession',
137
+ title: 'Profession',
138
+ },
139
+ ])
140
+
141
+ const folderTypes = [
142
+ {
143
+ title: 'AT',
144
+ value: 'at',
145
+ },
146
+ {
147
+ title: 'MP',
148
+ value: 'mp',
149
+ },
150
+ {
151
+ title: 'Autre',
152
+ value: 'other',
153
+ },
154
+ ]
155
+
156
+ const professionList = [
157
+ {
158
+ label: 'Chirurgien-dentiste',
159
+ value: 'chirurgien-dentiste',
160
+ },
161
+ {
162
+ label: 'Infirmier',
163
+ value: 'infirmier',
164
+ },
165
+ {
166
+ label: 'Orthophoniste',
167
+ value: 'orthophoniste',
168
+ },
169
+ {
170
+ label: 'Orthoptiste',
171
+ value: 'orthoptiste',
172
+ },
173
+ {
174
+ label: 'Pédicure-podologue',
175
+ value: 'pedicure-podologue',
176
+ },
177
+ {
178
+ label: 'Pharmacien',
179
+ value: 'pharmacien',
180
+ },
181
+ ]
182
+
183
+ return { args, filters, folderTypes, professionList }
184
+ },
185
+ template: `
186
+ <FilterSideBar
187
+ v-bind="args"
188
+ v-model="filters"
189
+ >
190
+ <template #name="{ props }">
191
+ <VTextField
192
+ v-bind="props"
193
+ label="Nom"
194
+ variant="outlined"
195
+ hide-details
196
+ color="primary"
197
+ />
198
+ </template>
199
+
200
+ <template #folder="{ props }">
201
+ <p class="text-secondary mb-4">
202
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
203
+ </p>
204
+
205
+ <VSelect
206
+ v-bind="props"
207
+ :items="folderTypes"
208
+ label="Type de dossier"
209
+ multiple
210
+ variant="outlined"
211
+ return-object
212
+ hide-details
213
+ color="primary"
214
+ />
215
+ </template>
216
+
217
+ <template #period="{ props }">
218
+ <PeriodField
219
+ v-bind="props"
220
+ variant="outlined"
221
+ />
222
+ </template>
223
+
224
+ <template #profession="{ props }">
225
+ <SearchListField
226
+ v-bind="props"
227
+ :items="professionList"
228
+ />
229
+ </template>
230
+ </FilterSideBar>
231
+ `,
232
+ }),
233
+ parameters: {
234
+ sourceCode: [
235
+ {
236
+ name: 'Template',
237
+ code: `
238
+ <FilterSideBar
239
+ v-model="filters"
240
+ >
241
+ <template #name="{ props }">
242
+ <VTextField
243
+ v-bind="props"
244
+ label="Nom"
245
+ variant="outlined"
246
+ hide-details
247
+ color="primary"
248
+ />
249
+ </template>
250
+
251
+ <template #folder="{ props }">
252
+ <p class="text-secondary mb-4">
253
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
254
+ </p>
255
+
256
+ <VSelect
257
+ v-bind="props"
258
+ :items="folderTypes"
259
+ label="Type de dossier"
260
+ multiple
261
+ variant="outlined"
262
+ return-object
263
+ hide-details
264
+ color="primary"
265
+ />
266
+ </template>
267
+
268
+ <template #period="{ props }">
269
+ <PeriodField
270
+ v-bind="props"
271
+ variant="outlined"
272
+ />
273
+ </template>
274
+
275
+ <template #profession="{ props }">
276
+ <SearchListField
277
+ v-bind="props"
278
+ :items="professionList"
279
+ />
280
+ </template>
281
+ </FilterSideBar>
282
+ `,
283
+ },
284
+ {
285
+ name: 'Script',
286
+ code: `
287
+ <script setup lang="ts">
288
+ import { ref } from 'vue'
289
+ import { FilterSideBar } from '@cnamts/synapse'
290
+
291
+ const filters = ref([
292
+ {
293
+ name: 'name',
294
+ title: 'Identité',
295
+ },
296
+ {
297
+ name: 'folder',
298
+ title: 'Type de dossier',
299
+ },
300
+ {
301
+ name: 'period',
302
+ title: 'Période',
303
+ },
304
+ {
305
+ name: 'profession',
306
+ title: 'Profession',
307
+ },
308
+ ])
309
+
310
+ const folderTypes = [
311
+ {
312
+ title: 'AT',
313
+ value: 'at',
314
+ },
315
+ {
316
+ title: 'MP',
317
+ value: 'mp',
318
+ },
319
+ {
320
+ title: 'Autre',
321
+ value: 'other',
322
+ },
323
+ ]
324
+
325
+ const professionList = [
326
+ {
327
+ label: 'Chirurgien-dentiste',
328
+ value: 'chirurgien-dentiste',
329
+ },
330
+ {
331
+ label: 'Infirmier',
332
+ value: 'infirmier',
333
+ },
334
+ {
335
+ label: 'Orthophoniste',
336
+ value: 'orthophoniste',
337
+ },
338
+ {
339
+ label: 'Orthoptiste',
340
+ value: 'orthoptiste',
341
+ },
342
+ {
343
+ label: 'Pédicure-podologue',
344
+ value: 'pedicure-podologue',
345
+ },
346
+ {
347
+ label: 'Pharmacien',
348
+ value: 'pharmacien',
349
+ },
350
+ ]
351
+
352
+ </script>`,
353
+ },
354
+ ],
355
+ },
356
+ }
357
+
358
+ export const ChipFormat: Story = {
359
+ args: {
360
+ 'onUpdate:modelValue': fn(),
361
+ },
362
+ decorators: [
363
+ () => ({
364
+ template: `
365
+ <VApp style="height: 500px; overflow-y: hidden;">
366
+ <div class="pa-4">
367
+ <story />
368
+ </div>
369
+ </VApp>
370
+ `,
371
+ }),
372
+ ],
373
+ render: args => ({
374
+ components: { FilterSideBar, RangeField },
375
+ setup() {
376
+ const filters = ref([
377
+ {
378
+ name: 'range-slider',
379
+ title: 'Intervalle',
380
+ value: [0, 50],
381
+ formatChip: ([min, max]: [number, number]) => [
382
+ {
383
+ text: `De ${min} à ${max}`,
384
+ value: [min, max],
385
+ },
386
+ ],
387
+ },
388
+ ])
389
+
390
+ return { args, filters }
391
+ },
392
+ template: `
393
+ <FilterSideBar
394
+ v-model="filters"
395
+ v-bind="args"
396
+ >
397
+ <template #range-slider="{ props }">
398
+ <RangeField
399
+ v-bind="props"
400
+ label="Intervalle"
401
+ />
402
+ </template>
403
+ </FilterSideBar>
404
+ `,
405
+ }),
406
+ parameters: {
407
+ sourceCode: [
408
+ {
409
+ name: 'Template',
410
+ code: `
411
+ <FilterSideBar
412
+ v-model="filters"
413
+ >
414
+ <template #range-slider="{ props }">
415
+ <RangeField
416
+ v-bind="props"
417
+ label="Intervalle"
418
+ />
419
+ </template>
420
+ </FilterSideBar>
421
+ `,
422
+ },
423
+ {
424
+ name: 'Script',
425
+ code: `
426
+ <script setup lang="ts">
427
+ import { ref } from 'vue'
428
+ import { FilterSideBar, RangeField } from '@cnamts/synapse'
429
+
430
+ const filters = ref([
431
+ {
432
+ name: 'range-slider',
433
+ title: 'Intervalle',
434
+ formatChip: ([min, max]: [number, number]) => [
435
+ {
436
+ text: \`De \${min} à \${max}\`,
437
+ value: [min, max],
438
+ },
439
+ ],
440
+ },
441
+ ])
442
+ </script>`,
443
+ },
444
+ ],
445
+ },
446
+ }
447
+
448
+ export const FilterCombination: Story = {
449
+ args: {
450
+ 'onUpdate:modelValue': fn(),
451
+ },
452
+ decorators: [
453
+ () => ({
454
+ template: `
455
+ <VApp style="height: 500px; overflow-y: hidden;">
456
+ <div class="pa-4">
457
+ <story />
458
+ </div>
459
+ </VApp>
460
+ `,
461
+ }),
462
+ ],
463
+ render: args => ({
464
+ components: { FilterSideBar, FilterInline, VTextField, VSelect, PeriodField, SearchListField, VDivider },
465
+ setup() {
466
+ const filters = ref([
467
+ {
468
+ name: 'name',
469
+ title: 'Identité',
470
+ },
471
+ {
472
+ name: 'folder',
473
+ title: 'Type de dossier',
474
+ },
475
+ {
476
+ name: 'period',
477
+ title: 'Période',
478
+ },
479
+ {
480
+ name: 'profession',
481
+ title: 'Profession',
482
+ },
483
+ ])
484
+
485
+ const folderTypes = [
486
+ {
487
+ title: 'AT',
488
+ value: 'at',
489
+ },
490
+ {
491
+ title: 'MP',
492
+ value: 'mp',
493
+ },
494
+ {
495
+ title: 'Autre',
496
+ value: 'other',
497
+ },
498
+ ]
499
+
500
+ const professionList = [
501
+ {
502
+ label: 'Chirurgien-dentiste',
503
+ value: 'chirurgien-dentiste',
504
+ },
505
+ {
506
+ label: 'Infirmier',
507
+ value: 'infirmier',
508
+ },
509
+ {
510
+ label: 'Orthophoniste',
511
+ value: 'orthophoniste',
512
+ },
513
+ {
514
+ label: 'Orthoptiste',
515
+ value: 'orthoptiste',
516
+ },
517
+ {
518
+ label: 'Pédicure-podologue',
519
+ value: 'pedicure-podologue',
520
+ },
521
+ {
522
+ label: 'Pharmacien',
523
+ value: 'pharmacien',
524
+ },
525
+ ]
526
+
527
+ return { args, filters, folderTypes, professionList }
528
+ },
529
+ template: `
530
+ <div>
531
+ <FilterSideBar
532
+ v-model="filters"
533
+ v-bind="args"
534
+ >
535
+ <template #name="{ props }">
536
+ <VTextField
537
+ v-bind="props"
538
+ label="Nom"
539
+ variant="outlined"
540
+ hide-details
541
+ color="primary"
542
+ />
543
+ </template>
544
+
545
+ <template #folder="{ props }">
546
+ <p class="text-secondary mb-4">
547
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
548
+ </p>
549
+
550
+ <VSelect
551
+ v-bind="props"
552
+ :items="folderTypes"
553
+ label="Type de dossier"
554
+ multiple
555
+ variant="outlined"
556
+ return-object
557
+ hide-details
558
+ color="primary"
559
+ />
560
+ </template>
561
+
562
+ <template #period="{ props }">
563
+ <PeriodField
564
+ v-bind="props"
565
+ variant="outlined"
566
+ />
567
+ </template>
568
+
569
+ <template #profession="{ props }">
570
+ <SearchListField
571
+ v-bind="props"
572
+ :items="professionList"
573
+ />
574
+ </template>
575
+ </FilterSideBar>
576
+ <VDivider class="my-4" />
577
+ <FilterInline
578
+ v-model="filters"
579
+ v-bind="args"
580
+ >
581
+ <template #name="{ props }">
582
+ <VTextField
583
+ v-bind="props"
584
+ label="Nom"
585
+ variant="outlined"
586
+ hide-details
587
+ color="primary"
588
+ />
589
+ </template>
590
+
591
+ <template #folder="{ props }">
592
+ <p class="text-secondary mb-4">
593
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
594
+ </p>
595
+
596
+ <VSelect
597
+ v-bind="props"
598
+ :items="folderTypes"
599
+ label="Type de dossier"
600
+ multiple
601
+ variant="outlined"
602
+ return-object
603
+ hide-details
604
+ color="primary"
605
+ />
606
+ </template>
607
+
608
+ <template #period="{ props }">
609
+ <PeriodField
610
+ v-bind="props"
611
+ variant="outlined"
612
+ />
613
+ </template>
614
+
615
+ <template #profession="{ props }">
616
+ <SearchListField
617
+ v-bind="props"
618
+ :items="professionList"
619
+ color="primary"
620
+ />
621
+ </template>
622
+ </FilterInline>
623
+ </div>
624
+ `,
625
+ }),
626
+ parameters: {
627
+ sourceCode: [
628
+ {
629
+ name: 'Template',
630
+ code: `
631
+ <div>
632
+ <FilterSideBar
633
+ v-model="filters"
634
+ >
635
+ <template #name="{ props }">
636
+ <VTextField
637
+ v-bind="props"
638
+ label="Nom"
639
+ variant="outlined"
640
+ hide-details
641
+ color="primary"
642
+ />
643
+ </template>
644
+
645
+ <template #folder="{ props }">
646
+ <p class="text-secondary mb-4">
647
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
648
+ </p>
649
+
650
+ <VSelect
651
+ v-bind="props"
652
+ :items="folderTypes"
653
+ label="Type de dossier"
654
+ multiple
655
+ variant="outlined"
656
+ return-object
657
+ hide-details
658
+ color="primary"
659
+ />
660
+ </template>
661
+
662
+ <template #period="{ props }">
663
+ <PeriodField
664
+ v-bind="props"
665
+ variant="outlined"
666
+ />
667
+ </template>
668
+
669
+ <template #profession="{ props }">
670
+ <SearchListField
671
+ v-bind="props"
672
+ :items="professionList"
673
+ />
674
+ </template>
675
+ </FilterSideBar>
676
+ <VDivider class="my-4" />
677
+ <FilterInline
678
+ v-model="filters"
679
+ >
680
+ <template #name="{ props }">
681
+ <VTextField
682
+ v-bind="props"
683
+ label="Nom"
684
+ variant="outlined"
685
+ hide-details
686
+ color="primary"
687
+ />
688
+ </template>
689
+
690
+ <template #folder="{ props }">
691
+ <p class="text-secondary mb-4">
692
+ Vous pouvez filtrer entre les dossiers de type <b>Arrêt de Travail (AT)</b> et <b>Maladie Professionnelle (MP)</b> ou <b>Autre</b>.
693
+ </p>
694
+
695
+ <VSelect
696
+ v-bind="props"
697
+ :items="folderTypes"
698
+ label="Type de dossier"
699
+ multiple
700
+ variant="outlined"
701
+ return-object
702
+ hide-details
703
+ color="primary"
704
+ />
705
+ </template>
706
+
707
+ <template #period="{ props }">
708
+ <PeriodField
709
+ v-bind="props"
710
+ variant="outlined"
711
+ />
712
+ </template>
713
+
714
+ <template #profession="{ props }">
715
+ <SearchListField
716
+ v-bind="props"
717
+ :items="professionList"
718
+ color="primary"
719
+ />
720
+ </template>
721
+ </FilterInline>
722
+ </div>
723
+ `,
724
+ },
725
+ {
726
+ name: 'Script',
727
+ code: `
728
+ <script setup lang="ts">
729
+ import { ref } from 'vue'
730
+ import { FilterSideBar, filterInline, SearchListField, PeriodField } from '@cnamts/synapse'
731
+ import { VDivider, VSelect, VTextField } from 'vuetify/components'
732
+
733
+ const filters = ref([
734
+ {
735
+ name: 'name',
736
+ title: 'Identité',
737
+ },
738
+ {
739
+ name: 'folder',
740
+ title: 'Type de dossier',
741
+ },
742
+ {
743
+ name: 'period',
744
+ title: 'Période',
745
+ },
746
+ {
747
+ name: 'profession',
748
+ title: 'Profession',
749
+ },
750
+ ])
751
+
752
+ const folderTypes = [
753
+ {
754
+ title: 'AT',
755
+ value: 'at',
756
+ },
757
+ {
758
+ title: 'MP',
759
+ value: 'mp',
760
+ },
761
+ {
762
+ title: 'Autre',
763
+ value: 'other',
764
+ },
765
+ ]
766
+
767
+ const professionList = [
768
+ {
769
+ label: 'Chirurgien-dentiste',
770
+ value: 'chirurgien-dentiste',
771
+ },
772
+ {
773
+ label: 'Infirmier',
774
+ value: 'infirmier',
775
+ },
776
+ {
777
+ label: 'Orthophoniste',
778
+ value: 'orthophoniste',
779
+ },
780
+ {
781
+ label: 'Orthoptiste',
782
+ value: 'orthoptiste',
783
+ },
784
+ {
785
+ label: 'Pédicure-podologue',
786
+ value: 'pedicure-podologue',
787
+ },
788
+ {
789
+ label: 'Pharmacien',
790
+ value: 'pharmacien',
791
+ },
792
+ ]
793
+
794
+ </script>`,
795
+ },
796
+ ],
797
+ },
798
+ }