Skip to content

Commit 2677a53

Browse files
authored
Merge pull request #314 from dnum-mi/feat/allow-custom-icon-in-header-links
feat: ✨ Permet icônes personnalisées dans header
2 parents 9beae9e + 75db256 commit 2677a53

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

src/components/DsfrHeader/DsfrHeader.stories.js

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
import DsfrHeader from './DsfrHeader.vue'
22

3+
import { addIcons } from 'oh-vue-icons'
4+
5+
import {
6+
RiAddCircleLine,
7+
RiLockLine,
8+
RiAccountCircleLine,
9+
} from 'oh-vue-icons/icons/ri/index.js'
10+
11+
addIcons(
12+
RiAddCircleLine,
13+
RiLockLine,
14+
RiAccountCircleLine,
15+
)
16+
317
export default {
418
component: DsfrHeader,
519
title: 'Composants/En-tête - DsfrHeader',
@@ -31,12 +45,15 @@ export default {
3145
quickLinks: {
3246
control: 'object',
3347
description: `Tableau des liens d’accès rapide, chaque objet contiendra les props suivantes :
34-
3548
- \`label\`: Texte du lien (\`'Notifications'\`, par ex.)
3649
- \`to\`: Chemin ou objet à passer à \`to\` de \`router-link\` ou \`nuxt-link\` (\`'/notification'\` ou \`{ name: 'Notifications' }\` par ex.)
3750
- \`href\`: URL à passer à \`href\` de la balise \`<a>\` (\`'https://systeme-de-design.gouv.fr\` par ex.) **pour un lien externe uniquement**.
38-
- \`icon\` pour le nom de l’icône à afficher (\`'phone-line'\` par ex.)
39-
- \`button\`: \`true\` pour avoir une balise \`button\`, \`false\` pour laisser en balise \`a\``,
51+
- \`icon\` Nom de l’icône [Remix Icon](https://remixicon.com/) (ou toute autre icône de [oh-vue-icons](https://oh-vue-icons.netlify.app/)) à afficher (\`'ri-phone-line'\` par ex.)
52+
- \`iconRight\` Permet de mettre l’icône à droite (si la valeur est \`true\` ou <em>truthy</em> et que \`icon\` est renseigné )
53+
- \`iconAttrs\` Ensemble des props/attributs à donner à \`<VIcon>\` (Cf. [Doc](https://oh-vue-icons.netlify.app/docs#props)). Ex. : \`{ scale: 0.9, animation: }\`
54+
- \`button\`: \`true\` pour avoir une balise \`button\`, \`false\` pour laisser en balise \`a\`
55+
- accepte aussi tout ce qui peut être mis sur un composant, par exemple \`class\`
56+
`,
4057
},
4158
modelValue: {
4259
control: 'text',
@@ -118,8 +135,8 @@ EnTete.args = {
118135
placeholder: '',
119136
homeTo: '#',
120137
quickLinks: [
121-
{ label: 'Créer un espace', to: '/path1', icon: 'add-circle-line' },
122-
{ label: 'Se connecter', to: '/path2', icon: 'lock-line' },
123-
{ label: 'S’enregistrer', to: '/path3', icon: 'account-line' },
138+
{ label: 'Créer un espace', to: '/space/create', icon: 'ri-add-circle-line', iconAttrs: { scale: 0.9 } },
139+
{ label: 'Se connecter', to: '/login', class: 'fr-fi-lock-line' },
140+
{ label: 'S’enregistrer', to: '/signin', icon: 'ri-account-circle-line', iconRight: true, iconAttrs: { animation: 'spin', speed: 'slow' } },
124141
],
125142
}

src/components/DsfrHeader/DsfrHeaderMenuLink.vue

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ export default defineComponent({
1515
type: String,
1616
default: undefined,
1717
},
18+
iconAttrs: {
19+
type: String,
20+
default: undefined,
21+
},
22+
iconRight: Boolean,
1823
label: {
1924
type: String,
2025
default: '',
@@ -69,10 +74,23 @@ export default defineComponent({
6974
<component
7075
:is="is"
7176
class="fr-btn"
72-
:class="`fr-fi-${icon}`"
7377
v-bind="linkData"
7478
@click.stop="onClick"
7579
>
80+
<VIcon
81+
v-if="(icon || iconAttrs) && !iconRight"
82+
:name="icon"
83+
class="fr-mr-1w"
84+
v-bind="iconAttrs"
85+
/>
86+
7687
{{ label }}
88+
89+
<VIcon
90+
v-if="(icon || iconAttrs) && iconRight"
91+
:name="icon"
92+
class="fr-ml-1w"
93+
v-bind="iconAttrs"
94+
/>
7795
</component>
7896
</template>

0 commit comments

Comments
 (0)