Skip to content

Commit 123f891

Browse files
committed
refactor(DsfrNavigationMegaMenuCategory): ♻️ 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 - nettoyage du composant Vue en enlevant withDefaults inutile ## Quelles modifications ont été apportées : - convertit la meta definition avec Meta<typeof DsfrNavigationMegaMenuCategory> - convertit la story NavigationMegaMenuCategorie au format StoryObj - utilise setup() avec ref() pour expandedMenuId au lieu de data() - remplace methods.toggle par une fonction dans setup() - retire withDefaults vide dans le composant .vue
1 parent 1762480 commit 123f891

File tree

2 files changed

+73
-73
lines changed

2 files changed

+73
-73
lines changed
Lines changed: 72 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
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 DsfrNavigationMegaMenu from './DsfrNavigationMegaMenu.vue'
48
import DsfrNavigationMegaMenuCategory from './DsfrNavigationMegaMenuCategory.vue'
59

6-
export default {
10+
const meta = {
711
component: DsfrNavigationMegaMenuCategory,
812
title: 'Composants/DsfrNavigationMegaMenuCategory',
913
argTypes: {
@@ -14,80 +18,78 @@ export default {
1418
links: {
1519
control: 'object',
1620
description:
17-
'Liste dobjets contenant les props de lien direct <a href="/?path=/docs/composants-dsfrnavigationmenulink--docs">DsfrNavigationMenuLink</a> de navigation (`to` et `text`)',
21+
'Liste d\'objets contenant les props de lien direct <a href="/?path=/docs/composants-dsfrnavigationmenulink--docs">DsfrNavigationMenuLink</a> de navigation (`to` et `text`)',
1822
},
1923
},
20-
}
24+
} as Meta<typeof DsfrNavigationMegaMenuCategory>
2125

22-
export const NavigationMegaMenuCategorie = (args) => ({
23-
components: {
24-
DsfrNavigation,
25-
DsfrNavigationItem,
26-
DsfrNavigationMegaMenu,
27-
DsfrNavigationMegaMenuCategory,
28-
},
26+
export default meta
27+
type Story = StoryObj<typeof meta>
2928

30-
data () {
31-
return {
32-
...args,
33-
expandedMenuId: undefined,
34-
}
29+
export const NavigationMegaMenuCategorie: Story = {
30+
args: {
31+
description: 'Description du mega-menu',
32+
link: undefined,
33+
megaMenutitle: 'Titre du mega-menu',
34+
title: 'Titre du catégorie',
35+
links: [
36+
{
37+
to: '#',
38+
text: 'Lien 1 de la catégorie',
39+
},
40+
{
41+
to: '#',
42+
text: 'Lien 2 de la catégorie',
43+
},
44+
{
45+
to: '#',
46+
text: 'Lien 3 de la catégorie',
47+
},
48+
{
49+
to: '#',
50+
text: 'Lien 4 de la catégorie',
51+
},
52+
{
53+
to: '#',
54+
text: 'Lien 5 de la catégorie',
55+
},
56+
],
3557
},
36-
37-
methods: {
38-
toggle (id) {
39-
if (id === this.expandedMenuId) {
40-
this.expandedMenuId = undefined
41-
return
42-
}
43-
this.expandedMenuId = id
58+
render: (args) => ({
59+
components: {
60+
DsfrNavigation,
61+
DsfrNavigationItem,
62+
DsfrNavigationMegaMenu,
63+
DsfrNavigationMegaMenuCategory,
4464
},
45-
},
46-
47-
template: `
48-
<DsfrNavigation>
49-
<DsfrNavigationItem>
50-
<DsfrNavigationMegaMenu
51-
:title="megaMenutitle"
52-
:description="description"
53-
:link="link"
54-
:expanded-id="expandedMenuId"
55-
@toggle-id="toggle($event)"
56-
>
57-
<DsfrNavigationMegaMenuCategory
58-
:title="title"
59-
:links="links"
60-
/>
61-
</DsfrNavigationMegaMenu>
62-
</DsfrNavigationItem>
63-
</DsfrNavigation>
64-
`,
65-
})
66-
NavigationMegaMenuCategorie.args = {
67-
description: 'Description du mega-menu',
68-
link: undefined,
69-
megaMenutitle: 'Titre du mega-menu',
70-
title: 'Titre du catégorie',
71-
links: [
72-
{
73-
to: '#',
74-
text: 'Lien 1 de la catégorie',
75-
},
76-
{
77-
to: '#',
78-
text: 'Lien 2 de la catégorie',
79-
},
80-
{
81-
to: '#',
82-
text: 'Lien 3 de la catégorie',
83-
},
84-
{
85-
to: '#',
86-
text: 'Lien 4 de la catégorie',
87-
},
88-
{
89-
to: '#',
90-
text: 'Lien 5 de la catégorie',
65+
setup () {
66+
const expandedMenuId = ref(undefined)
67+
const toggle = (id: string | undefined) => {
68+
if (id === expandedMenuId.value) {
69+
expandedMenuId.value = undefined
70+
return
71+
}
72+
expandedMenuId.value = id
73+
}
74+
return { args, expandedMenuId, toggle }
9175
},
92-
],
76+
template: `
77+
<DsfrNavigation>
78+
<DsfrNavigationItem>
79+
<DsfrNavigationMegaMenu
80+
:title="args.megaMenutitle"
81+
:description="args.description"
82+
:link="args.link"
83+
:expanded-id="expandedMenuId"
84+
@toggle-id="toggle($event)"
85+
>
86+
<DsfrNavigationMegaMenuCategory
87+
:title="args.title"
88+
:links="args.links"
89+
/>
90+
</DsfrNavigationMegaMenu>
91+
</DsfrNavigationItem>
92+
</DsfrNavigation>
93+
`,
94+
}),
9395
}

src/components/DsfrNavigation/DsfrNavigationMegaMenuCategory.vue

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ import DsfrNavigationMenuLink from './DsfrNavigationMenuLink.vue'
55
66
export type { DsfrNavigationMegaMenuCategoryProps }
77
8-
withDefaults(defineProps<DsfrNavigationMegaMenuCategoryProps>(), {
9-
10-
})
8+
defineProps<DsfrNavigationMegaMenuCategoryProps>()
119
</script>
1210

1311
<template>

0 commit comments

Comments
 (0)