From e1e534ef39917e593f67ad9bef2d063bffa59d37 Mon Sep 17 00:00:00 2001 From: ShallowRed <48523123+ShallowRed@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:26:09 +0200 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=E2=9C=A8=20Nouvelle=20impl=C3=A9me?= =?UTF-8?q?ntation=20du=20composant=20DsfrTile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING CHANGE: Les props 'verticalAtMd' et 'verticalAtLg' n'existent plus --- src/components/DsfrTile/DsfrTile.spec.ts | 24 ++++++ src/components/DsfrTile/DsfrTile.stories.ts | 81 +++++++++++---------- src/components/DsfrTile/DsfrTile.vue | 40 +++++----- src/components/DsfrTile/DsfrTiles.spec.ts | 38 ++++++++++ 4 files changed, 126 insertions(+), 57 deletions(-) diff --git a/src/components/DsfrTile/DsfrTile.spec.ts b/src/components/DsfrTile/DsfrTile.spec.ts index 776700e4..ad9ddc44 100644 --- a/src/components/DsfrTile/DsfrTile.spec.ts +++ b/src/components/DsfrTile/DsfrTile.spec.ts @@ -68,4 +68,28 @@ describe('DsfrTile', () => { expect(titleEl.parentNode.parentNode.parentNode.parentNode).toHaveClass('fr-tile--horizontal') expect(descriptionEl).toHaveClass('fr-tile__desc') }) + + it('should display a tile with a download link', async () => { + const title = 'Titre de la tuile' + const imgSrc = 'https://placekitten.com/80/80' + const description = 'Lorem ipsum dolor sit amet, consectetur adipiscing, incididunt, ut labore et dol' + const download = true + const { getByText } = render(DsfrTile, { + global: { + plugins: [router], + }, + props: { + title, + imgSrc, + description, + download, + to: 'https://placekitten.com/80/80', + }, + }) + + await router.isReady() + + const titleEl = getByText(title) + expect(titleEl).toHaveAttribute('download', 'true') + }) }) diff --git a/src/components/DsfrTile/DsfrTile.stories.ts b/src/components/DsfrTile/DsfrTile.stories.ts index b57dedb9..68ef94fb 100644 --- a/src/components/DsfrTile/DsfrTile.stories.ts +++ b/src/components/DsfrTile/DsfrTile.stories.ts @@ -27,49 +27,52 @@ export default { control: 'boolean', description: 'Permet le basculement de la tuile en mode horizontal', }, - verticalAtMd: { - control: 'boolean', - description: 'Permet le basculement de la tuile en mode vertical au point de rupture "md"', + vertical: { + options: ['md', 'lg'], + control: { + type: 'select', + }, + description: 'Permet le basculement de la tuile en mode vertical, selon le point de rupture "md" ou "lg" spécifié', }, - verticalAtLg: { + disabled: { control: 'boolean', - description: 'Permet le basculement de la tuile en mode vertical au point de rupture "lg"', + description: 'Permet de rendre la tuile désactivée et non-cliquable', }, - small: { + to: { + control: 'text', + description: 'Lien vers lequel la tuile pointe. Peut être une string ou objet à donner à `RouterLink` ou un lien externe (`string` commençant par `"http"`)', + }, + titleTag: { + control: 'text', + description: 'Permet de choisir la balise contenant le titre de la tuile (h3 par défaut)', + }, + download: { control: 'boolean', - description: 'Permet d’afficher la tuile dans un plus petit format', + description: 'Permet de passer la tuile en mode téléchargement', }, - disabled: { + small: { control: 'boolean', - description: 'Permet de rendre la tuile désactivée et non-cliquable', + description: 'Permet de basculer la tuile en petit format', }, - download: { + icon: { control: 'boolean', - description: 'Variante de tuile indiquant que le lien permet de télécharger un fichier (la tuile de téléchargement est obligatoirement horizontale)', + description: 'Permet de désactiver l\'icone associée au lien', }, noBorder: { control: 'boolean', - description: 'Variante de tuile sans bordure', + description: 'Permet de désactiver la bordure de la tuile', }, - noBackground: { + shadow: { control: 'boolean', - description: 'Variante de tuile sans arrière-plan', + description: 'Permet d\'ajouter une ombre portée à la tuile', }, - shadow: { + noBackground: { control: 'boolean', - description: 'Variante de tuile avec ombre portée', + description: 'Permet de désactiver la couleur de fond de la tuile', }, grey: { control: 'boolean', - description: 'Variante de tuile plus contrastée avec arrière-plan grisé', - }, - to: { - control: 'text', - description: 'Lien vers lequel la tuile pointe. Peut être une string ou objet à donner à `RouterLink` ou un lien externe (`string` commençant par `"http"`)', - }, - titleTag: { - control: 'text', - description: 'Permet de choisir la balise contenant le titre de la tuile (h3 par défaut)', + description: 'Permet de passer le fond de la tuile en gris', }, }, } @@ -92,36 +95,34 @@ export const TuileSimple = (args) => ({ :description="description" :details="details" :horizontal="horizontal" - :verticalAtMd="verticalAtMd" - :verticalAtLg="verticalAtLg" - :small="small" + :vertical="vertical" :disabled="false" + :to="to" + :title-tag="titleTag" :download="download" - :noBorder="noBorder" - :noBackground="noBackground" + :small="small" + :icon="icon" + :no-border="noBorder" :shadow="shadow" + :no-background="noBackground" :grey="grey" - :to="to" - :title-tag="titleTag" /> `, }) TuileSimple.args = { title: 'Ma formidable tuile', - imgSrc: 'http://placekitten.com/g/80/80', + imgSrc: 'http://placekitten.com/g/200/200', description: 'Une tuile absolument formidable', - details: 'Quelques détails', horizontal: false, - verticalAtMd: false, - verticalAtLg: false, - small: false, disabled: false, + to: '#', + titleTag: 'h2', download: false, + small: false, + icon: false, noBorder: false, - noBackground: false, shadow: false, + noBackground: false, grey: false, - to: '#', - titleTag: 'h2', } diff --git a/src/components/DsfrTile/DsfrTile.vue b/src/components/DsfrTile/DsfrTile.vue index d36bfd3f..1f1a5d84 100644 --- a/src/components/DsfrTile/DsfrTile.vue +++ b/src/components/DsfrTile/DsfrTile.vue @@ -9,16 +9,16 @@ export type DsfrTileProps = { details?: string disabled?: boolean horizontal?: boolean - verticalAtMd?: boolean - verticalAtLg?: boolean - small?: boolean + vertical?: 'md' | 'lg' + to?: RouteLocationRaw, + titleTag?: string download?: boolean + small?: boolean + icon?: boolean noBorder?: boolean - noBackground?: boolean shadow?: boolean + noBackground?: boolean grey?: boolean - to?: RouteLocationRaw - titleTag?: string } const props = withDefaults(defineProps(), { @@ -26,8 +26,11 @@ const props = withDefaults(defineProps(), { imgSrc: undefined, description: undefined, details: undefined, + horizontal: false, + vertical: undefined, to: '#', titleTag: 'h3', + icon: true, }) const isExternalLink = computed(() => { @@ -38,19 +41,20 @@ const isExternalLink = computed(() => {