Skip to content

Commit d800267

Browse files
committed
refactor(DsfrNavigationMenuItem): ♻️ convertit les stories au format CSF3
## Pourquoi les changements ont été faits : - migration vers Storybook 9 avec format CSF3 - remplacement de l'Options API par la Composition API - amélioration du typage TypeScript ## Quelles modifications ont été apportées : - convertit la meta definition avec Meta<typeof DsfrNavigationMenuItem> - convertit la story ItemDeMenuDeNavigation au format StoryObj - utilise setup() avec ref() pour expandedId au lieu de data() - remplace methods.toggle par une fonction dans setup() - ajout de types TypeScript pour les paramètres de toggle
1 parent 123f891 commit d800267

File tree

1 file changed

+51
-44
lines changed

1 file changed

+51
-44
lines changed
Lines changed: 51 additions & 44 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 DsfrNavigation from './DsfrNavigation.vue'
26
import DsfrNavigationItem from './DsfrNavigationItem.vue'
37
import DsfrNavigationMenu from './DsfrNavigationMenu.vue'
48
import DsfrNavigationMenuItem from './DsfrNavigationMenuItem.vue'
59
import DsfrNavigationMenuLink from './DsfrNavigationMenuLink.vue'
610

7-
export default {
11+
const meta = {
812
component: DsfrNavigationMenuItem,
913
title: 'Composants/DsfrNavigationMenuItem',
1014
argTypes: {
@@ -29,54 +33,57 @@ export default {
2933
'Indique si l’élément est actif (l’utilisateur est actuellement sur la page pointée par cet item de menu de navigation).',
3034
},
3135
},
32-
}
36+
} as Meta<typeof DsfrNavigationMenuItem>
3337

34-
export const ItemDeMenuDeNavigation = (args) => ({
35-
components: {
36-
DsfrNavigation,
37-
DsfrNavigationItem,
38-
DsfrNavigationMenu,
39-
DsfrNavigationMenuItem,
40-
DsfrNavigationMenuLink,
41-
},
38+
export default meta
39+
type Story = StoryObj<typeof meta>
4240

43-
data () {
44-
return args
41+
export const ItemDeMenuDeNavigation: Story = {
42+
args: {
43+
active: false,
44+
expandedId: '',
45+
id: undefined,
46+
menuId: 'test-menu-id',
4547
},
48+
render: (args) => ({
49+
components: {
50+
DsfrNavigation,
51+
DsfrNavigationItem,
52+
DsfrNavigationMenu,
53+
DsfrNavigationMenuItem,
54+
DsfrNavigationMenuLink,
55+
},
4656

47-
methods: {
48-
toggle (id) {
49-
if (id === this.expandedId) {
50-
this.expandedId = undefined
51-
return
57+
setup () {
58+
const expandedId = ref(args.expandedId)
59+
const toggle = (id: string | undefined) => {
60+
if (id === expandedId.value) {
61+
expandedId.value = undefined
62+
return
63+
}
64+
expandedId.value = id
5265
}
53-
this.expandedId = id
66+
return { args, expandedId, toggle }
5467
},
55-
},
5668

57-
template: `
58-
<DsfrNavigation>
59-
<DsfrNavigationItem>
60-
<DsfrNavigationMenu
61-
title="Titre de menu"
62-
@toggle-id="toggle($event)"
63-
:expanded-id="expandedId"
64-
:id="menuId"
65-
>
66-
<DsfrNavigationMenuItem :id="id" :active="active">
67-
<DsfrNavigationMenuLink
68-
to="/"
69-
text="Texte du lien de l’item de menu"
70-
/>
71-
</DsfrNavigationMenuItem>
72-
</DsfrNavigationMenu>
73-
</DsfrNavigationItem>
74-
</DsfrNavigation>
75-
`,
76-
})
77-
ItemDeMenuDeNavigation.args = {
78-
active: false,
79-
expandedId: '',
80-
id: undefined,
81-
menuId: 'test-menu-id',
69+
template: `
70+
<DsfrNavigation>
71+
<DsfrNavigationItem>
72+
<DsfrNavigationMenu
73+
title="Titre de menu"
74+
@toggle-id="toggle($event)"
75+
:expanded-id="expandedId"
76+
:id="args.menuId"
77+
>
78+
<DsfrNavigationMenuItem :id="args.id" :active="args.active">
79+
<DsfrNavigationMenuLink
80+
to="/"
81+
text="Texte du lien de l'item de menu"
82+
/>
83+
</DsfrNavigationMenuItem>
84+
</DsfrNavigationMenu>
85+
</DsfrNavigationItem>
86+
</DsfrNavigation>
87+
`,
88+
}),
8289
}

0 commit comments

Comments
 (0)