Skip to content

Commit 902396a

Browse files
committed
refactor(DsfrSideMenuButton): ♻️ modernise le composant et convertit les stories en CSF3
## Pourquoi les changements ont été faits : - Modernisation du composant DsfrSideMenuButton selon les conventions Vue 3 - Migration des stories Storybook vers le format CSF3 moderne - Amélioration de la cohérence avec les autres composants du projet - Évite les erreurs de parsing Storybook en utilisant les bonnes pratiques établies ## Quelles modifications ont été apportées : - Ajout de defineSlots avec documentation TypeScript pour le slot default - Conversion de la story au format CSF3 avec Meta/StoryObj et satisfies - Migration de l'option API vers la Composition API avec setup() et ref - Correction de l'ordre des imports TypeScript/Vue selon les règles ESLint - Correction de faute de frappe dans le template (actifavec -> actif avec) - Échappement des apostrophes dans les descriptions argTypes françaises
1 parent c379fc7 commit 902396a

File tree

2 files changed

+49
-33
lines changed

2 files changed

+49
-33
lines changed
Lines changed: 40 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
1+
import type { Meta, StoryObj } from '@storybook/vue3'
2+
3+
import { ref } from 'vue'
4+
15
import DsfrSideMenu from './DsfrSideMenu.vue'
26
import DsfrSideMenuButton from './DsfrSideMenuButton.vue'
37
import DsfrSideMenuLink from './DsfrSideMenuLink.vue'
48
import DsfrSideMenuList from './DsfrSideMenuList.vue'
59
import DsfrSideMenuListItem from './DsfrSideMenuListItem.vue'
610

7-
export default {
11+
const meta = {
812
component: DsfrSideMenuButton,
913
title: 'Composants/DsfrSideMenuButton',
1014
argTypes: {
@@ -23,43 +27,47 @@ export default {
2327
'Valeur de l’id du menu associé qui sera plié et déplié lors du clic sur ce bouton',
2428
},
2529
},
26-
}
30+
} satisfies Meta<typeof DsfrSideMenuButton>
2731

28-
export const BoutonDeMenuDepliable = (args) => ({
29-
components: {
30-
DsfrSideMenu,
31-
DsfrSideMenuList,
32-
DsfrSideMenuListItem,
33-
DsfrSideMenuLink,
34-
DsfrSideMenuButton,
35-
},
32+
export default meta
3633

37-
data () {
38-
return {
39-
...args,
40-
isExpanded: args.expanded,
41-
}
42-
},
34+
type Story = StoryObj<typeof meta>
4335

44-
template: `
36+
export const BoutonDeMenuDepliable: Story = {
37+
render: (args) => ({
38+
components: {
39+
DsfrSideMenu,
40+
DsfrSideMenuList,
41+
DsfrSideMenuListItem,
42+
DsfrSideMenuLink,
43+
DsfrSideMenuButton,
44+
},
45+
46+
setup () {
47+
return {
48+
args,
49+
}
50+
},
51+
52+
template: `
4553
<DsfrSideMenu
4654
heading-title="Menu latéral exemplaire"
4755
buttonLabel="Bouton exemplaire"
4856
>
4957
<DsfrSideMenuList :id="id">
5058
<DsfrSideMenuListItem>
5159
<DsfrSideMenuButton
52-
:active="active"
53-
:expanded="isExpanded"
54-
:control-id="controlId"
55-
@toggle-expand="isExpanded = !isExpanded"
60+
:active="args.active"
61+
:expanded="args.expanded"
62+
:control-id="args.controlId"
63+
@toggle-expand="args.expanded = !args.expanded"
5664
>
57-
Item de menu actifavec sous-menu
65+
Item de menu actif avec sous-menu
5866
</DsfrSideMenuButton>
5967
<DsfrSideMenuList
60-
:id="controlId"
61-
:expanded="expanded"
62-
:collapsable="true"
68+
:id="args.controlId"
69+
:expanded="args.expanded"
70+
collapsable
6371
>
6472
<DsfrSideMenuListItem>
6573
<DsfrSideMenuLink
@@ -80,10 +88,11 @@ export const BoutonDeMenuDepliable = (args) => ({
8088
</DsfrSideMenuList>
8189
</DsfrSideMenu>
8290
`,
83-
})
84-
BoutonDeMenuDepliable.args = {
85-
active: false,
86-
expanded: false,
87-
controlId: 'sidemenu-1',
88-
id: 'list-id',
91+
}),
92+
args: {
93+
active: false,
94+
expanded: false,
95+
controlId: 'sidemenu-1',
96+
id: 'list-id',
97+
},
8998
}

src/components/DsfrSideMenu/DsfrSideMenuButton.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ export type { DsfrSideMenuButtonProps }
55
66
defineProps<DsfrSideMenuButtonProps>()
77
8-
defineEmits<{ (e: 'toggleExpand', payload: string): void }>()
8+
defineEmits<{
9+
/** Émis lors du clic sur le bouton */
10+
toggleExpand: [string]
11+
}>()
12+
13+
defineSlots<{
14+
/** Slot par défaut pour le texte du bouton */
15+
default?: () => any
16+
}>()
917
</script>
1018

1119
<template>
@@ -16,7 +24,6 @@ defineEmits<{ (e: 'toggleExpand', payload: string): void }>()
1624
:aria-controls="controlId"
1725
@click="$emit('toggleExpand', controlId)"
1826
>
19-
<!-- @slot Slot par défaut pour le texte du bouton -->
2027
<slot />
2128
</button>
2229
</template>

0 commit comments

Comments
 (0)