From 058654040aca17c7f4eef463ec734813e0ee2c12 Mon Sep 17 00:00:00 2001 From: Sami Korpela Date: Fri, 10 Jan 2025 14:26:08 +0200 Subject: [PATCH] OPHJOD-1149: Update MediaCard --- .../MediaCard/MediaCard.stories.tsx | 28 ++++++++++++++++ lib/components/MediaCard/MediaCard.tsx | 32 +++++++++++++++++-- .../__snapshots__/MediaCard.test.tsx.snap | 2 +- 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/lib/components/MediaCard/MediaCard.stories.tsx b/lib/components/MediaCard/MediaCard.stories.tsx index 9205672..4f69141 100644 --- a/lib/components/MediaCard/MediaCard.stories.tsx +++ b/lib/components/MediaCard/MediaCard.stories.tsx @@ -45,3 +45,31 @@ export const Horizontal: Story = { tags: ['Taglorem', 'Loremtag', 'Nonutag'], }, }; + +export const VerticalWithRating: Story = { + parameters: { + design: { + type: 'figma', + url: 'https://www.figma.com/design/6M2LrpSCcB0thlFDaQAI2J/cx_jod_client?node-id=2217-8529', + }, + }, + argTypes: { + rating: { + control: { + type: 'range', + min: 0, + max: 5, + step: 1, + }, + }, + }, + args: { + rating: 3, + variant: 'vertical', + imageSrc: 'https://images.unsplash.com/photo-1523464862212-d6631d073194?q=80&w=260?q=80&w=260', + imageAlt: 'Woman standing in front of a colourful wall', + label: 'Tulevaisuusmatka', + description: 'Tulevaisuusmatka on koulutus, joka auttaa sinua löytämään oman polkusi ja tavoitteesi.', + tags: ['Taglorem', 'Loremtag', 'Nonutag'], + }, +}; diff --git a/lib/components/MediaCard/MediaCard.tsx b/lib/components/MediaCard/MediaCard.tsx index 2d236ab..f7a1e59 100644 --- a/lib/components/MediaCard/MediaCard.tsx +++ b/lib/components/MediaCard/MediaCard.tsx @@ -1,3 +1,4 @@ +import { MdOutlineStar } from 'react-icons/md'; import { cx } from '../../cva'; type Variant = 'vertical' | 'horizontal'; @@ -23,6 +24,9 @@ export type MediaCardProps = { label: string; description: string; tags: string[]; + /** Rating between 0-5*/ + rating?: number; + ratingAriaLabel?: string; } & LinkComponent; const getVariantContainerClassNames = ({ variant }: { variant: Variant }) => { @@ -33,7 +37,7 @@ const getVariantContainerClassNames = ({ variant }: { variant: Variant }) => { }; const getVariantImageClassNames = ({ variant }: { variant: Variant }) => { - return cx({ + return cx('ds-object-cover', { 'ds-min-h-[147px]': variant === 'vertical', 'ds-h-full ds-min-w-[265px]': variant === 'horizontal', }); @@ -67,6 +71,23 @@ const LinkOrDiv = ({ ); }; +interface RatingElementProps { + /** Amount of the rating, possible values between 0-5 */ + amount: number; + ariaLabel: string; +} + +const RatingElement = ({ amount, ariaLabel }: RatingElementProps) => { + return ( +
+ {Array.from({ length: 5 }).map((_, idx) => ( + // eslint-disable-next-line react/no-array-index-key + + ))} +
+ ); +}; + export const MediaCard = ({ variant = 'vertical', imageSrc, @@ -76,18 +97,25 @@ export const MediaCard = ({ tags, linkComponent: Link, to, + rating, + ratingAriaLabel, }: MediaCardProps) => { const variantContainerClassNames = getVariantContainerClassNames({ variant }); const variantImageClassNames = getVariantImageClassNames({ variant }); return ( - {imageAlt} + {imageSrc ? ( + {imageAlt} + ) : ( + + )}
{label}
{description}
+ {rating !== undefined && }
    {tags.map((tag) => ( diff --git a/lib/components/MediaCard/__snapshots__/MediaCard.test.tsx.snap b/lib/components/MediaCard/__snapshots__/MediaCard.test.tsx.snap index 42df390..7858819 100644 --- a/lib/components/MediaCard/__snapshots__/MediaCard.test.tsx.snap +++ b/lib/components/MediaCard/__snapshots__/MediaCard.test.tsx.snap @@ -6,7 +6,7 @@ exports[`MediaCard > renders the MediaCard component with default vertical varia > Image for default