From ddce3ab76852b56483e95ecca9991b54d393654a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vincent=20Lain=C3=A9?= Date: Fri, 30 Jun 2023 09:17:03 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20Ajout=20de=20la=20possibili?= =?UTF-8?q?t=C3=A9=20d'ajouter=20le=20badge=20"BETA"=20sur=20le=20composan?= =?UTF-8?q?t=20Header?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/DsfrHeader/DsfrHeader.spec.ts | 31 ++++++++++ .../DsfrHeader/DsfrHeader.stories.ts | 59 +++++++++++++++++++ src/components/DsfrHeader/DsfrHeader.vue | 17 +++++- 3 files changed, 106 insertions(+), 1 deletion(-) diff --git a/src/components/DsfrHeader/DsfrHeader.spec.ts b/src/components/DsfrHeader/DsfrHeader.spec.ts index a58dac02..5e0975ac 100644 --- a/src/components/DsfrHeader/DsfrHeader.spec.ts +++ b/src/components/DsfrHeader/DsfrHeader.spec.ts @@ -106,4 +106,35 @@ describe('DsfrHeader', () => { // Then expect(logo).toHaveClass('fr-logo') }) + + it('should render DsfrHeader with a BETA badge', async () => { + // Given + const logoText = 'Gouvernement' + const serviceTitle = 'Nom du service' + const serviceDescription = 'Description du service' + const showBeta = true + + // When + const { getByText } = render(DsfrHeader, { + global: { + plugins: [router], + components: { + VIcon, + }, + }, + props: { + logoText, + serviceTitle, + serviceDescription, + showBeta, + }, + }) + + await router.isReady() + + const betaBadge = getByText('BETA') + + // Then + expect(betaBadge).toHaveClass('fr-badge') + }) }) diff --git a/src/components/DsfrHeader/DsfrHeader.stories.ts b/src/components/DsfrHeader/DsfrHeader.stories.ts index 97130385..622c061a 100644 --- a/src/components/DsfrHeader/DsfrHeader.stories.ts +++ b/src/components/DsfrHeader/DsfrHeader.stories.ts @@ -38,6 +38,10 @@ export default { control: 'boolean', description: 'Indique si le champs de recherche doit être affiché (`true`) ou non (`false`, défaut)', }, + showBeta: { + control: 'boolean', + description: 'Indique si le badge "BETA" doit être affiché (`true`) ou non (`false`, défaut)', + }, homeTo: { control: 'text', description: 'Lien cible au clic sur le logo ou le titre', @@ -384,3 +388,58 @@ EnTeteAvecNavigation.args = { }, ], } + +export const EnTeteAvecBadgeBeta = (args, { argTypes }) => ({ + components: { + DsfrHeader, + }, + data () { + return { + ...args, + quickLincks: args.quickLinks.map((link, idx) => { + if (idx === 0) { + link.onClick = ($event) => { + $event.preventDefault() + this.actionOnLink() + } + } + return link + }), + } + }, + + template: ` + + `, + + methods: { + onClickOnLogo ($event) { + $event.preventDefault() + $event.stopPropagation() + this.actionOnLogo($event) + }, + }, + +}) +EnTeteAvecBadgeBeta.args = { + showSearch: false, + showBeta: true, + logoText: ['Ministère', 'de l’intérieur'], + serviceTitle: 'Nom du Site/Service', + serviceDescription: 'baseline - précisions sur l‘organisation', + modelValue: '', + placeholder: '', + homeTo: '#', + quickLinks: [], +} diff --git a/src/components/DsfrHeader/DsfrHeader.vue b/src/components/DsfrHeader/DsfrHeader.vue index 97f270fe..c66f2932 100644 --- a/src/components/DsfrHeader/DsfrHeader.vue +++ b/src/components/DsfrHeader/DsfrHeader.vue @@ -19,6 +19,7 @@ type DsfrHeaderProps = { searchLabel?: string quickLinksAriaLabel?: string showSearch?: boolean + showBeta?: boolean } const props = withDefaults(defineProps(), { @@ -150,6 +151,12 @@ defineEmits<{ >

{{ serviceTitle }} + + BETA +

+

+

+ BETA +

+
- +