From c91f449f2077b5a77ac3788c174f968ca7149281 Mon Sep 17 00:00:00 2001 From: dkacper Date: Tue, 13 Jun 2023 16:36:18 +0200 Subject: [PATCH 1/7] feat: add RatingButton base component --- .../thumbnails/components/RatingButton.png | Bin 0 -> 8307 bytes apps/docs/components/components/rating.md | 3 +- .../components/components/ratingbutton.md | 165 ++++++++++++++++++ .../next/pages/examples/SfRatingButton.tsx | 75 ++++++++ .../pages/showcases/RatingButton/Basic.tsx | 17 ++ .../showcases/RatingButton/CustomIcon.tsx | 33 ++++ .../showcases/RatingButton/MaxNumber.tsx | 17 ++ .../pages/showcases/RatingButton/Sizes.tsx | 21 +++ .../nuxt/pages/examples/SfRatingButton.vue | 68 ++++++++ .../pages/showcases/RatingButton/Basic.vue | 12 ++ .../showcases/RatingButton/CustomIcon.vue | 27 +++ .../showcases/RatingButton/MaxNumber.vue | 12 ++ .../pages/showcases/RatingButton/Sizes.vue | 15 ++ .../react/components/SfIcons/SfIconStar.tsx | 2 +- .../components/SfIcons/SfIconStarFilled.tsx | 2 +- .../SfRatingButton/SfRatingButton.tsx | 100 +++++++++++ .../react/components/SfRatingButton/index.ts | 4 + .../react/components/SfRatingButton/types.ts | 24 +++ packages/sfui/frameworks/react/index.ts | 1 + .../SfRatingButton/SfRatingButton.vue | 112 ++++++++++++ .../vue/components/SfRatingButton/index.ts | 4 + .../vue/components/SfRatingButton/types.ts | 5 + packages/sfui/frameworks/vue/index.ts | 1 + packages/sfui/shared/types/SfRatingButton.ts | 5 + packages/sfui/shared/types/index.ts | 1 + .../SfRatingButton.PageObject.ts | 65 +++++++ .../SfRatingButton/SfRatingButton.cy.tsx | 159 +++++++++++++++++ 27 files changed, 946 insertions(+), 4 deletions(-) create mode 100644 apps/docs/components/.vuepress/public/thumbnails/components/RatingButton.png create mode 100644 apps/docs/components/components/ratingbutton.md create mode 100644 apps/preview/next/pages/examples/SfRatingButton.tsx create mode 100644 apps/preview/next/pages/showcases/RatingButton/Basic.tsx create mode 100644 apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx create mode 100644 apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx create mode 100644 apps/preview/next/pages/showcases/RatingButton/Sizes.tsx create mode 100644 apps/preview/nuxt/pages/examples/SfRatingButton.vue create mode 100644 apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue create mode 100644 apps/preview/nuxt/pages/showcases/RatingButton/CustomIcon.vue create mode 100644 apps/preview/nuxt/pages/showcases/RatingButton/MaxNumber.vue create mode 100644 apps/preview/nuxt/pages/showcases/RatingButton/Sizes.vue create mode 100644 packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx create mode 100644 packages/sfui/frameworks/react/components/SfRatingButton/index.ts create mode 100644 packages/sfui/frameworks/react/components/SfRatingButton/types.ts create mode 100644 packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue create mode 100644 packages/sfui/frameworks/vue/components/SfRatingButton/index.ts create mode 100644 packages/sfui/frameworks/vue/components/SfRatingButton/types.ts create mode 100644 packages/sfui/shared/types/SfRatingButton.ts create mode 100644 packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts create mode 100644 packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx diff --git a/apps/docs/components/.vuepress/public/thumbnails/components/RatingButton.png b/apps/docs/components/.vuepress/public/thumbnails/components/RatingButton.png new file mode 100644 index 0000000000000000000000000000000000000000..70e193d068cda1aa43970d29b88db395b1be3e3d GIT binary patch literal 8307 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 D4bc+U literal 0 HcmV?d00001 diff --git a/apps/docs/components/components/rating.md b/apps/docs/components/components/rating.md index 7ef603703f..a18d95f0a2 100644 --- a/apps/docs/components/components/rating.md +++ b/apps/docs/components/components/rating.md @@ -13,7 +13,7 @@ hideBreadcrumbs: true ### Value handling -The `value` prop allows you to set the current rating and max number of stars via `max` prop. +The `value` prop allows you to set the current rating and max number of stars via `max` prop. If you need to support partial stars, you can show half-filled star icons by passing the `half-increment` prop. @@ -47,7 +47,6 @@ If you need to support partial stars, you can show half-filled star icons by pas Rating by default uses a `warning-500` for filled and partially filled stars and `disabled-500` as an empty icon color. You can change these values in your [Tailwind configuration](https://tailwindcss.com/docs/configuration#theme) or override them for a single element using [`important modifier`](https://tailwindcss.com/docs/configuration#important-modifier). - diff --git a/apps/docs/components/components/ratingbutton.md b/apps/docs/components/components/ratingbutton.md new file mode 100644 index 0000000000..0da68c0aca --- /dev/null +++ b/apps/docs/components/components/ratingbutton.md @@ -0,0 +1,165 @@ +--- +layout: AtomLayout +hideBreadcrumbs: true +--- + +# RatingButton + +The RatingButton component is an interactive input element specifically designed for evaluations on product pages. It provides users with the ability to select a rating by choosing an icon using either the cursor or keyboard input. The number of icons displayed and the actual icon used can be customized based on your specific requirements. The rating scale within the component operates from left to right. + +::: slot usage + +## Examples + +### Basic usage + +To make the RatingButton work you just have to provide a state. + + + +<<<../../preview/nuxt/pages/showcases/RatingButton/Basic.vue + + +<<<../../preview/next/pages/showcases/RatingButton/Basic.tsx#source + + + +### Sizes + +RatingButton comes with three different sizes which are compatible with StorefrontUI icons. Size of the RatingButton maps to the icon size as follows: + +- `SfRatingButtonSize.sm` -> `SfIconSize.base` +- `SfRatingButtonSize.base` -> `SfIconSize.lg` +- `SfRatingButtonSize.lg` -> `SfIconSize.xl` + + + +<<<../../preview/nuxt/pages/showcases/RatingButton/Sizes.vue + + +<<<../../preview/next/pages/showcases/RatingButton/Sizes.tsx#source + + + +### Different number of icons + +Set any number of icons using `max` prop. + + + +<<<../../preview/nuxt/pages/showcases/RatingButton/MaxNumber.vue + + +<<<../../preview/next/pages/showcases/RatingButton/MaxNumber.tsx#source + + + +### Custom icon + +You can customize an icon of the RatingButton using + + render function. + + + scoped slot. + + It passes some usefull props that you can use to manage your custom icons. + + + +<<<../../preview/nuxt/pages/showcases/RatingButton/CustomIcon.vue + + +<<<../../preview/next/pages/showcases/RatingButton/CustomIcon.tsx#source + + + +## Accessibility notes + +RatingButton follows [WAI-ARIA guidelines](https://www.w3.org/WAI/ARIA/apg/patterns/radio/examples/radio-rating/) for rating radio groups. + +The outer wrapper element has a role ["radiogroup"](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/radiogroup_role). You can set its aria-label using the `ariaLabel` prop. If you want to use visible label you should add it by yourself, and provide proper `aria-labelledby`. + +The RatingButton uses hidden radio input elements to satisfy all keyboard functional requirements. Each input element has corresponding label that reflects selected value. By default it says "stars", so make sure you change it when using custom icons. You can change each icon label using `getLabelText` prop. + +## Playground + + + +::: + +::: slot api + +## Props + +| Prop name | Type | Default value | Possible values | +| -------------- | ------------------------------------------------- | ------------------ | ------------------ | + +| `value` | `number` | `0` | | +| `onChange` | `(value: number) => void` | | | + +| `name` | `string` | `sf-rating-button` | | +| `max` | `number` | `5` | | +| `size` | `SfRatingButtonSize` | `base` | `sm`, `base`, `lg` | +| `disabled` | `boolean` | `false` | | +| `ariaLabel` | `string` | `Rating` | | +| `getLabelText` | `(value: number) => string` | | | + +| `children` | `(state: SfRatingButtonRenderProps) => ReactNode` | | | + + + + +## Render function props + +SfRatingButtonRenderProps + +| Prop name | Type | Default value | Possible values | +| ---------- | -------------------- | ------------- | ------------------ | +| `isFilled` | `boolean` | | | +| `value` | `number` | | | +| `max` | `number` | | | +| `iconSize` | `SfIconSize` | | `base`, `lg`, `xl` | + + + + + +## Slots + +| Slot name | Description | +| --------- | ------------------------------------------------------------------------ | +| `default` | Scoped slot of a single icon to be rendered when iteraing all the icons. | + +### Slot props + +| Prop name | Type | Default value | Possible values | +| ---------- | -------------------- | ------------- | ------------------ | +| `isFilled` | `boolean` | | | +| `max` | `number` | | | +| `iconSize` | `SfIconSize` | | `base`, `lg`, `xl` | + +## Events + +| Event name | Trigger | +| ------------------- | ----------------------------- | +| `update:modelValue` | triggers v-model update event | + + + +::: + +## Source code + +::: slot source + + + +<<<../../../packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue + + +<<<../../../packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx + + + +::: diff --git a/apps/preview/next/pages/examples/SfRatingButton.tsx b/apps/preview/next/pages/examples/SfRatingButton.tsx new file mode 100644 index 0000000000..86e3238ab7 --- /dev/null +++ b/apps/preview/next/pages/examples/SfRatingButton.tsx @@ -0,0 +1,75 @@ +import { useEffect, useState } from 'react'; +import { SfRatingButton, SfRatingButtonSize } from '@storefront-ui/react'; +import { ExamplePageLayout } from '../examples'; +import { prepareControls } from '../../components/utils/Controls'; +import ComponentExample from '../../components/utils/ComponentExample'; + +function Example() { + const [max, setMax] = useState(5); + const { state, controls } = prepareControls( + [ + { + type: 'range', + modelName: 'value', + propDefaultValue: 0, + propType: 'number', + options: [ + { + bind: { + min: 0, + max, + step: 1, + }, + }, + ], + }, + { + type: 'range', + modelName: 'max', + propDefaultValue: 5, + propType: 'number', + options: [ + { + bind: { + min: 1, + step: 1, + max: 10, + }, + }, + ], + }, + { + type: 'select', + modelName: 'size', + propType: 'SfRatingButtonSize', + propDefaultValue: SfRatingButtonSize.base, + options: Object.values(SfRatingButtonSize), + }, + { + type: 'boolean', + modelName: 'disabled', + propType: 'boolean', + propDefaultValue: false, + }, + ], + { + value: 0, + max, + disabled: false, + size: SfRatingButtonSize.base, + }, + ); + + useEffect(() => { + setMax(state.get.max || 5); + }, [state.get.max]); + + return ( + + state.set({ value })} /> + + ); +} + +Example.getLayout = ExamplePageLayout; +export default Example; diff --git a/apps/preview/next/pages/showcases/RatingButton/Basic.tsx b/apps/preview/next/pages/showcases/RatingButton/Basic.tsx new file mode 100644 index 0000000000..a17be4455e --- /dev/null +++ b/apps/preview/next/pages/showcases/RatingButton/Basic.tsx @@ -0,0 +1,17 @@ +import { ShowcasePageLayout } from '../../showcases'; +// #region source +import { useState } from 'react'; +import { SfRatingButton } from '@storefront-ui/react'; + +export default function RatingButtonBasic() { + const [rating, setRating] = useState(0); + return ( +
+

Select rating

+ +
+ ); +} + +// #endregion source +RatingButtonBasic.getLayout = ShowcasePageLayout; diff --git a/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx b/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx new file mode 100644 index 0000000000..22e0e82734 --- /dev/null +++ b/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx @@ -0,0 +1,33 @@ +import { ShowcasePageLayout } from '../../showcases'; +// #region source +import { useState } from 'react'; +import { SfIconFavorite, SfIconFavoriteFilled, SfRatingButton } from '@storefront-ui/react'; + +export default function RatingButtonCustomIcon() { + const [rating, setRating] = useState(0); + return ( +
+

Select rating

+ + {({ isFilled, iconSize }) => + isFilled ? ( + + ) : ( + + ) + } + +
+ ); +} + +// #endregion source +RatingButtonCustomIcon.getLayout = ShowcasePageLayout; diff --git a/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx b/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx new file mode 100644 index 0000000000..b342fc7b1a --- /dev/null +++ b/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx @@ -0,0 +1,17 @@ +import { ShowcasePageLayout } from '../../showcases'; +// #region source +import { useState } from 'react'; +import { SfRatingButton } from '@storefront-ui/react'; + +export default function RatingButtonMax() { + const [rating, setRating] = useState(5); + return ( +
+

Select rating

+ +
+ ); +} + +// #endregion source +RatingButtonMax.getLayout = ShowcasePageLayout; diff --git a/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx b/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx new file mode 100644 index 0000000000..345df1493c --- /dev/null +++ b/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx @@ -0,0 +1,21 @@ +import { ShowcasePageLayout } from '../../showcases'; +// #region source +import { useState } from 'react'; +import { SfRatingButton } from '@storefront-ui/react'; + +export default function RatingButtonSizes() { + const [rating1, setRating1] = useState(5); + const [rating2, setRating2] = useState(5); + const [rating3, setRating3] = useState(5); + + return ( +
+ + + +
+ ); +} + +// #endregion source +RatingButtonSizes.getLayout = ShowcasePageLayout; diff --git a/apps/preview/nuxt/pages/examples/SfRatingButton.vue b/apps/preview/nuxt/pages/examples/SfRatingButton.vue new file mode 100644 index 0000000000..52f92b9e93 --- /dev/null +++ b/apps/preview/nuxt/pages/examples/SfRatingButton.vue @@ -0,0 +1,68 @@ + + + diff --git a/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue b/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue new file mode 100644 index 0000000000..4a54ce3fac --- /dev/null +++ b/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue @@ -0,0 +1,12 @@ + + + diff --git a/apps/preview/nuxt/pages/showcases/RatingButton/CustomIcon.vue b/apps/preview/nuxt/pages/showcases/RatingButton/CustomIcon.vue new file mode 100644 index 0000000000..916f63a186 --- /dev/null +++ b/apps/preview/nuxt/pages/showcases/RatingButton/CustomIcon.vue @@ -0,0 +1,27 @@ + + + diff --git a/apps/preview/nuxt/pages/showcases/RatingButton/MaxNumber.vue b/apps/preview/nuxt/pages/showcases/RatingButton/MaxNumber.vue new file mode 100644 index 0000000000..e817bc0539 --- /dev/null +++ b/apps/preview/nuxt/pages/showcases/RatingButton/MaxNumber.vue @@ -0,0 +1,12 @@ + + + diff --git a/apps/preview/nuxt/pages/showcases/RatingButton/Sizes.vue b/apps/preview/nuxt/pages/showcases/RatingButton/Sizes.vue new file mode 100644 index 0000000000..2ed01ecb71 --- /dev/null +++ b/apps/preview/nuxt/pages/showcases/RatingButton/Sizes.vue @@ -0,0 +1,15 @@ + + + diff --git a/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx b/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx index 0cab8cce5d..e5d78a2ea3 100644 --- a/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx +++ b/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx @@ -3,7 +3,7 @@ import { SfIconBase, SfIconSize } from '@storefront-ui/react'; export default function SfIconStar({ size = SfIconSize.base, viewBox = '0 0 24 24', ...attributes }: SfIconProps) { return ( - + ); diff --git a/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx b/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx index bf76438564..7f86d2eadf 100644 --- a/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx +++ b/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx @@ -7,7 +7,7 @@ export default function SfIconStarFilled({ ...attributes }: SfIconProps) { return ( - + ); diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx b/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx new file mode 100644 index 0000000000..d282b415b6 --- /dev/null +++ b/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx @@ -0,0 +1,100 @@ +import { useState, type ChangeEvent } from 'react'; +import classNames from 'classnames'; +import { + SfIconStar, + SfIconStarFilled, + SfIconSize, + SfRatingButtonSize, + type SfRatingButtonProps, + type SfRatingButtonRenderProps, +} from '@storefront-ui/react'; + +function defaultLabelText(value: number) { + return `${value} Star${value !== 1 ? 's' : ''}`; +} + +const renderDefaultIcon = ({ isFilled, iconSize }: SfRatingButtonRenderProps) => { + if (isFilled) { + return ( + + ); + } + return ( + + ); +}; + +export default function SfRatingButton({ + onChange, + value = 0, + disabled = false, + max = 5, + name = 'sf-rating-button', + ariaLabel = 'Rating', + size = SfRatingButtonSize.base, + getLabelText = defaultLabelText, + children = renderDefaultIcon, + className, + ...attributes +}: SfRatingButtonProps): JSX.Element { + const [hoverValue, setHoverValue] = useState(0); + const icons = Array.from({ length: Math.floor(Math.abs(max)) }, (_, index) => index + 1); + const isIconFilled = (ratingValue: number) => ratingValue <= hoverValue || (hoverValue === 0 && ratingValue <= value); + const iconSize: Record = { + [SfRatingButtonSize.sm]: SfIconSize.base, + [SfRatingButtonSize.base]: SfIconSize.lg, + [SfRatingButtonSize.lg]: SfIconSize.xl, + }; + + const handleChange = (event: ChangeEvent) => { + onChange?.(Number(event.target.value)); + }; + + const handleHoverIn = (ratingValue: number) => () => { + if (!disabled) { + setHoverValue(ratingValue); + } + }; + + const handleHoverOut = () => { + if (!disabled) { + setHoverValue(0); + } + }; + + return ( +
+ {icons.map((ratingValue) => ( + + ))} +
+ ); +} diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/index.ts b/packages/sfui/frameworks/react/components/SfRatingButton/index.ts new file mode 100644 index 0000000000..f181b7b8d8 --- /dev/null +++ b/packages/sfui/frameworks/react/components/SfRatingButton/index.ts @@ -0,0 +1,4 @@ +export { default as SfRatingButton } from './SfRatingButton'; + +export * from './types'; + diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/types.ts b/packages/sfui/frameworks/react/components/SfRatingButton/types.ts new file mode 100644 index 0000000000..1094f09d74 --- /dev/null +++ b/packages/sfui/frameworks/react/components/SfRatingButton/types.ts @@ -0,0 +1,24 @@ +import { type ReactNode } from 'react'; +import { PropsWithStyle } from '@storefront-ui/react'; +import { SfIconSize, SfRatingButtonSize } from '@storefront-ui/shared'; + +export { SfRatingButtonSize }; + +export interface SfRatingButtonRenderProps { + isFilled: boolean; + value: number; + max: number; + iconSize: Extract<`${SfIconSize}`, 'base' | 'lg' | 'xl'>; +} + +export interface SfRatingButtonProps extends PropsWithStyle { + value?: number; + onChange?: (value: number) => void; + max?: number; + name?: string; + disabled?: boolean; + ariaLabel?: string; + size?: `${SfRatingButtonSize}`; + getLabelText?: (value: number) => string; + children?: (state: SfRatingButtonRenderProps) => ReactNode; +} diff --git a/packages/sfui/frameworks/react/index.ts b/packages/sfui/frameworks/react/index.ts index 099301d7f9..9a8c842e35 100644 --- a/packages/sfui/frameworks/react/index.ts +++ b/packages/sfui/frameworks/react/index.ts @@ -37,3 +37,4 @@ export * from './components/SfSwitch'; export * from './components/SfScrollable'; export * from './components/SfTooltip'; export * from './components/SfThumbnail'; +export * from './components/SfRatingButton'; diff --git a/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue b/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue new file mode 100644 index 0000000000..c2861a9f44 --- /dev/null +++ b/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue @@ -0,0 +1,112 @@ + + + diff --git a/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts b/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts new file mode 100644 index 0000000000..b615c5640e --- /dev/null +++ b/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts @@ -0,0 +1,4 @@ +export { default as SfRatingButton } from './SfRatingButton.vue'; + +export * from './types'; + diff --git a/packages/sfui/frameworks/vue/components/SfRatingButton/types.ts b/packages/sfui/frameworks/vue/components/SfRatingButton/types.ts new file mode 100644 index 0000000000..a82eeea4a0 --- /dev/null +++ b/packages/sfui/frameworks/vue/components/SfRatingButton/types.ts @@ -0,0 +1,5 @@ +import { SfIconSize } from '@storefront-ui/shared'; + +export { SfRatingButtonSize } from '@storefront-ui/shared'; + +export type SfRatingButtonIconSize = Extract<`${SfIconSize}`, 'base' | 'lg' | 'xl'>; diff --git a/packages/sfui/frameworks/vue/index.ts b/packages/sfui/frameworks/vue/index.ts index b847b120ef..8565ecff39 100644 --- a/packages/sfui/frameworks/vue/index.ts +++ b/packages/sfui/frameworks/vue/index.ts @@ -37,3 +37,4 @@ export * from './components/SfSelect'; export * from './components/SfSwitch'; export * from './components/SfTooltip'; export * from './components/SfThumbnail'; +export * from './components/SfRatingButton'; diff --git a/packages/sfui/shared/types/SfRatingButton.ts b/packages/sfui/shared/types/SfRatingButton.ts new file mode 100644 index 0000000000..5976ad5aa7 --- /dev/null +++ b/packages/sfui/shared/types/SfRatingButton.ts @@ -0,0 +1,5 @@ +export enum SfRatingButtonSize { + sm = 'sm', + base = 'base', + lg = 'lg', +} diff --git a/packages/sfui/shared/types/index.ts b/packages/sfui/shared/types/index.ts index 3d61ec6171..423a77cf3d 100644 --- a/packages/sfui/shared/types/index.ts +++ b/packages/sfui/shared/types/index.ts @@ -11,6 +11,7 @@ export * from './SfListItem'; export * from './SfLoader'; export * from './SfProgress'; export * from './SfRating'; +export * from './SfRatingButton'; export * from './SfSelect'; export * from './SfThumbnail'; diff --git a/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts b/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts new file mode 100644 index 0000000000..a638705cf7 --- /dev/null +++ b/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts @@ -0,0 +1,65 @@ +import { BasePage } from '../../utils/BasePage'; + +export default class SfRatingButtonBaseObject extends BasePage { + hasValue(value: number) { + this.container.find('input:checked').should('have.attr', 'value', value); + return this; + } + + hasAriaLabel(ariaLabel: string) { + this.container.should('have.attr', 'aria-label', ariaLabel); + return this; + } + + allInputsHaveName(name: string, max: number) { + this.inputs.should(($inputs) => { + expect($inputs, `${max} inputs`).to.have.length(max); + Array.from({ length: max }, (_, index) => index).forEach((index) => { + expect($inputs.eq(index), `${index} input`).to.have.attr('name', name); + }); + }); + return this; + } + + hasLabels(getLabelText: (value: number) => string, max: number) { + this.labels.should(($labels) => { + expect($labels, `${max} labels`).to.have.length(max); + Array.from({ length: max }, (_, index) => index + 1).forEach((value, index) => { + expect($labels.eq(index), `${index} input`).to.contain(getLabelText(value)); + }); + }); + return this; + } + + hasIconsByValue(value: number, max: number) { + this.iconFilled.should('have.length', value); + this.iconEmpty.should('have.length', max - value); + return this; + } + + clickFilledIcon(index = 0) { + this.iconFilled.eq(index).click(); + return this; + } + + clickEmptyIcon(index = 0) { + this.iconEmpty.eq(index).click(); + return this; + } + + get inputs() { + return this.container.find('input'); + } + + get labels() { + return this.container.find('label'); + } + + get iconFilled() { + return this.getTestElement('ratingbutton-icon-filled'); + } + + get iconEmpty() { + return this.getTestElement('ratingbutton-icon-empty'); + } +} diff --git a/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx new file mode 100644 index 0000000000..cd026b782d --- /dev/null +++ b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx @@ -0,0 +1,159 @@ +/// +import React from 'react'; +import { SfRatingButtonSize, noop } from '@storefront-ui/shared'; +import { mount, useComponent } from '../../utils/mount'; + +const { vue: SfRatingButtonVue, react: SfRatingButtonReact } = useComponent('SfRatingButton'); +import SfRatingButtonBaseObject from './SfRatingButton.PageObject'; + +describe('SfRatingButton', () => { + const page = () => new SfRatingButtonBaseObject('ratingbutton'); + + const initializeComponent = ( + props: { + value?: number; + onChange?: (value: number) => void; + max?: number; + name?: string; + disabled?: boolean; + ariaLabel?: string; + size?: SfRatingButtonSize; + getLabelText?: (value: number) => string; + // children?: (state: SfRatingButtonRenderProps) => ReactNode; + } = {}, + ) => { + const { + value = 0, + onChange = noop, + max = 5, + name = 'sf-rating-button', + disabled = false, + ariaLabel = 'Rating', + size = SfRatingButtonSize.base, + getLabelText = (value) => `${value} star`, + } = props; + return mount({ + vue: { + component: SfRatingButtonVue, + props: { + modelValue: value, + 'onUpdate:modelValue': onChange, + max, + name, + disabled, + ariaLabel, + size, + getLabelText, + }, + }, + react: ( + + ), + }); + }; + + it('initial state', () => { + initializeComponent(); + + page().makeSnapshot(); + }); + + describe('when value prop', () => { + it('should trigger onChange/emit modelValue when click on icon', () => { + const props = { value: 6, max: 9, onChange: cy.spy() }; + initializeComponent(props); + + page().clickEmptyIcon(); + cy.then(() => { + expect(props.onChange).calledOnceWith(); + }); + }); + }); + + describe('when value and max is set', () => { + it('should display number of icons same as max value', () => { + const props = { value: 6, max: 9 }; + initializeComponent(props); + + page().hasIconsByValue(props.value, props.max); + }); + }); + + describe('when prop name is set', () => { + it('should pass given name to all inputs', () => { + const props = { name: 'custom-name', max: 5 }; + initializeComponent(props); + + page().allInputsHaveName(props.name, props.max); + }); + }); + + describe('when prop ariaLabel is set', () => { + it('should pass given ariaLabel', () => { + const props = { ariaLabel: 'rating button label' }; + initializeComponent(props); + + page().hasAriaLabel(props.ariaLabel); + }); + }); + + describe('when prop disabled=true', () => { + it('should not change value on click', () => { + const props = { disabled: true, value: 1, onChange: cy.spy() }; + initializeComponent(props); + + page().hasValue(props.value).clickFilledIcon().hasValue(props.value); + cy.then(() => { + expect(props.onChange).not.to.be.called; + }); + page().clickEmptyIcon().hasValue(props.value); + cy.then(() => { + expect(props.onChange).not.to.be.called; + }); + }); + + it('should be grey', () => { + const props = { disabled: true }; + initializeComponent(props); + + page().makeSnapshot(); + }); + + it('should be grey with filled icons', () => { + const props = { disabled: true, value: 4, max: 5 }; + initializeComponent(props); + + page().makeSnapshot(); + }); + }); + + describe('when prop getLabelText is set', () => { + it('should pass given label to each input', () => { + const props = { getLabelText: (value) => `${value} heart${value !== 1 ? 's' : ''}`, max: 5 }; + initializeComponent(props); + + page().hasLabels(props.getLabelText, props.max); + }); + }); + + describe('when prop size is set to ', () => { + Object.values(SfRatingButtonSize).forEach((size) => { + describe(`${size}`, () => { + it(`should render correct ${size} size`, () => { + initializeComponent({ size }); + + page().makeSnapshot(); + }); + }); + }); + }); +}); From 5eed58065a0f40d09a860d1266adc4ccd9952c1e Mon Sep 17 00:00:00 2001 From: dkacper Date: Wed, 14 Jun 2023 11:04:53 +0200 Subject: [PATCH 2/7] fix: adjust RadioButton api --- .../components/components/ratingbutton.md | 30 ++++++------- .../react/components/SfIcons/SfIconStar.tsx | 2 +- .../components/SfIcons/SfIconStarFilled.tsx | 2 +- .../SfRatingButton/SfRatingButton.tsx | 19 ++++----- .../react/components/SfRatingButton/index.ts | 1 - .../react/components/SfRatingButton/types.ts | 4 +- .../SfRatingButton/SfRatingButton.vue | 13 ++++-- .../vue/components/SfRatingButton/index.ts | 1 - .../SfRatingButton.PageObject.ts | 33 ++++++++------- .../SfRatingButton/SfRatingButton.cy.tsx | 42 +++++++++++++------ 10 files changed, 81 insertions(+), 66 deletions(-) diff --git a/apps/docs/components/components/ratingbutton.md b/apps/docs/components/components/ratingbutton.md index 0da68c0aca..a2bb26fdfc 100644 --- a/apps/docs/components/components/ratingbutton.md +++ b/apps/docs/components/components/ratingbutton.md @@ -41,9 +41,9 @@ RatingButton comes with three different sizes which are compatible with Storefro
-### Different number of icons +### Adjust maximum rating score value -Set any number of icons using `max` prop. +Set any number of stars using `max` prop. For example, if you increase the maximum rating score to 10, the component will dynamically generate ten buttons, giving users a wider range of options to rate their experience. @@ -78,7 +78,7 @@ You can customize an icon of the RatingButton using RatingButton follows [WAI-ARIA guidelines](https://www.w3.org/WAI/ARIA/apg/patterns/radio/examples/radio-rating/) for rating radio groups. -The outer wrapper element has a role ["radiogroup"](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/radiogroup_role). You can set its aria-label using the `ariaLabel` prop. If you want to use visible label you should add it by yourself, and provide proper `aria-labelledby`. +The outer wrapper element is `
`. You can set a corrsponding `` using `label` prop. The RatingButton uses hidden radio input elements to satisfy all keyboard functional requirements. Each input element has corresponding label that reflects selected value. By default it says "stars", so make sure you change it when using custom icons. You can change each icon label using `getLabelText` prop. @@ -92,20 +92,21 @@ The RatingButton uses hidden radio input elements to satisfy all keyboard functi ## Props -| Prop name | Type | Default value | Possible values | -| -------------- | ------------------------------------------------- | ------------------ | ------------------ | +| Prop name | Type | Default value | Possible values | +| ---------------- | ------------------------------------------------- | ------------------ | ------------------ | -| `value` | `number` | `0` | | -| `onChange` | `(value: number) => void` | | | +| `value` | `number` | `0` | | +| `onChange` | `(value: number) => void` | | | -| `name` | `string` | `sf-rating-button` | | -| `max` | `number` | `5` | | -| `size` | `SfRatingButtonSize` | `base` | `sm`, `base`, `lg` | -| `disabled` | `boolean` | `false` | | -| `ariaLabel` | `string` | `Rating` | | -| `getLabelText` | `(value: number) => string` | | | +| `name` | `string` | `sf-rating-button` | | +| `max` | `number` | `5` | | +| `size` | `SfRatingButtonSize` | `base` | `sm`, `base`, `lg` | +| `disabled` | `boolean` | `false` | | +| `label` | `string` | `Rating` | | +| `labelClassName` | `string` | `Rating` | | +| `getLabelText` | `(value: number) => string` | | | -| `children` | `(state: SfRatingButtonRenderProps) => ReactNode` | | | +| `children` | `(state: SfRatingButtonRenderProps) => ReactNode` | | | @@ -117,7 +118,6 @@ SfRatingButtonRenderProps | Prop name | Type | Default value | Possible values | | ---------- | -------------------- | ------------- | ------------------ | | `isFilled` | `boolean` | | | -| `value` | `number` | | | | `max` | `number` | | | | `iconSize` | `SfIconSize` | | `base`, `lg`, `xl` | diff --git a/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx b/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx index e5d78a2ea3..0cab8cce5d 100644 --- a/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx +++ b/packages/sfui/frameworks/react/components/SfIcons/SfIconStar.tsx @@ -3,7 +3,7 @@ import { SfIconBase, SfIconSize } from '@storefront-ui/react'; export default function SfIconStar({ size = SfIconSize.base, viewBox = '0 0 24 24', ...attributes }: SfIconProps) { return ( - + ); diff --git a/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx b/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx index 7f86d2eadf..bf76438564 100644 --- a/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx +++ b/packages/sfui/frameworks/react/components/SfIcons/SfIconStarFilled.tsx @@ -7,7 +7,7 @@ export default function SfIconStarFilled({ ...attributes }: SfIconProps) { return ( - + ); diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx b/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx index d282b415b6..40a9f9df44 100644 --- a/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx +++ b/packages/sfui/frameworks/react/components/SfRatingButton/SfRatingButton.tsx @@ -17,7 +17,6 @@ const renderDefaultIcon = ({ isFilled, iconSize }: SfRatingButtonRenderProps) => if (isFilled) { return ( +
+ {label} {icons.map((ratingValue) => ( ))} - +
); } diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/index.ts b/packages/sfui/frameworks/react/components/SfRatingButton/index.ts index f181b7b8d8..d236807ae3 100644 --- a/packages/sfui/frameworks/react/components/SfRatingButton/index.ts +++ b/packages/sfui/frameworks/react/components/SfRatingButton/index.ts @@ -1,4 +1,3 @@ export { default as SfRatingButton } from './SfRatingButton'; export * from './types'; - diff --git a/packages/sfui/frameworks/react/components/SfRatingButton/types.ts b/packages/sfui/frameworks/react/components/SfRatingButton/types.ts index 1094f09d74..bea783445d 100644 --- a/packages/sfui/frameworks/react/components/SfRatingButton/types.ts +++ b/packages/sfui/frameworks/react/components/SfRatingButton/types.ts @@ -6,7 +6,6 @@ export { SfRatingButtonSize }; export interface SfRatingButtonRenderProps { isFilled: boolean; - value: number; max: number; iconSize: Extract<`${SfIconSize}`, 'base' | 'lg' | 'xl'>; } @@ -17,7 +16,8 @@ export interface SfRatingButtonProps extends PropsWithStyle { max?: number; name?: string; disabled?: boolean; - ariaLabel?: string; + label?: string; + labelClassName?: string; size?: `${SfRatingButtonSize}`; getLabelText?: (value: number) => string; children?: (state: SfRatingButtonRenderProps) => ReactNode; diff --git a/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue b/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue index c2861a9f44..95e85acb0c 100644 --- a/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue +++ b/packages/sfui/frameworks/vue/components/SfRatingButton/SfRatingButton.vue @@ -25,7 +25,11 @@ const props = defineProps({ type: String, default: 'sf-rating-button', }, - ariaLabel: { + label: { + type: String, + default: 'Rating', + }, + labelClassName: { type: String, default: 'Rating', }, @@ -74,14 +78,14 @@ const handleHoverOut = () => { diff --git a/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts b/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts index b615c5640e..28cec5c956 100644 --- a/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts +++ b/packages/sfui/frameworks/vue/components/SfRatingButton/index.ts @@ -1,4 +1,3 @@ export { default as SfRatingButton } from './SfRatingButton.vue'; export * from './types'; - diff --git a/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts b/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts index a638705cf7..9cb5cc20f2 100644 --- a/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts +++ b/packages/tests/components/SfRatingButton/SfRatingButton.PageObject.ts @@ -6,26 +6,27 @@ export default class SfRatingButtonBaseObject extends BasePage { return this; } - hasAriaLabel(ariaLabel: string) { - this.container.should('have.attr', 'aria-label', ariaLabel); + hasLabel(label: string) { + cy.get('legend').contains(label); return this; } - allInputsHaveName(name: string, max: number) { + allInputsHaveAttr({ + max, + attr, + expectedValue, + }: { + max: number; + attr: string; + expectedValue: string | ((value: number) => string); + }) { this.inputs.should(($inputs) => { expect($inputs, `${max} inputs`).to.have.length(max); - Array.from({ length: max }, (_, index) => index).forEach((index) => { - expect($inputs.eq(index), `${index} input`).to.have.attr('name', name); - }); - }); - return this; - } - - hasLabels(getLabelText: (value: number) => string, max: number) { - this.labels.should(($labels) => { - expect($labels, `${max} labels`).to.have.length(max); Array.from({ length: max }, (_, index) => index + 1).forEach((value, index) => { - expect($labels.eq(index), `${index} input`).to.contain(getLabelText(value)); + expect($inputs.eq(index), `${index} input`).to.have.attr( + attr, + typeof expectedValue === 'function' ? expectedValue(value) : expectedValue, + ); }); }); return this; @@ -56,10 +57,10 @@ export default class SfRatingButtonBaseObject extends BasePage { } get iconFilled() { - return this.getTestElement('ratingbutton-icon-filled'); + return this.getTestElement('star-filled'); } get iconEmpty() { - return this.getTestElement('ratingbutton-icon-empty'); + return this.getTestElement('star'); } } diff --git a/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx index cd026b782d..b83fef2af1 100644 --- a/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx +++ b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx @@ -5,6 +5,7 @@ import { mount, useComponent } from '../../utils/mount'; const { vue: SfRatingButtonVue, react: SfRatingButtonReact } = useComponent('SfRatingButton'); import SfRatingButtonBaseObject from './SfRatingButton.PageObject'; +import { isVue } from '../../utils/utils'; describe('SfRatingButton', () => { const page = () => new SfRatingButtonBaseObject('ratingbutton'); @@ -16,10 +17,10 @@ describe('SfRatingButton', () => { max?: number; name?: string; disabled?: boolean; - ariaLabel?: string; + label?: string; size?: SfRatingButtonSize; getLabelText?: (value: number) => string; - // children?: (state: SfRatingButtonRenderProps) => ReactNode; + children?: () => JSX.Element; } = {}, ) => { const { @@ -28,9 +29,10 @@ describe('SfRatingButton', () => { max = 5, name = 'sf-rating-button', disabled = false, - ariaLabel = 'Rating', + label = 'Rating', size = SfRatingButtonSize.base, getLabelText = (value) => `${value} star`, + children, } = props; return mount({ vue: { @@ -41,10 +43,13 @@ describe('SfRatingButton', () => { max, name, disabled, - ariaLabel, + label, size, getLabelText, }, + slots: { + default: () => children?.(), + }, }, react: ( { max={max} name={name} disabled={disabled} - ariaLabel={ariaLabel} + label={label} size={size} getLabelText={getLabelText} - > + > + {children} + ), }); }; @@ -74,7 +81,7 @@ describe('SfRatingButton', () => { page().clickEmptyIcon(); cy.then(() => { - expect(props.onChange).calledOnceWith(); + expect(props.onChange).to.be.calledOnce; }); }); }); @@ -93,16 +100,16 @@ describe('SfRatingButton', () => { const props = { name: 'custom-name', max: 5 }; initializeComponent(props); - page().allInputsHaveName(props.name, props.max); + page().allInputsHaveAttr({ attr: 'name', expectedValue: props.name, max: props.max }); }); }); - describe('when prop ariaLabel is set', () => { - it('should pass given ariaLabel', () => { - const props = { ariaLabel: 'rating button label' }; + describe('when prop label is set', () => { + it('should pass given label', () => { + const props = { label: 'rating button label' }; initializeComponent(props); - page().hasAriaLabel(props.ariaLabel); + page().hasLabel(props.label); }); }); @@ -141,7 +148,7 @@ describe('SfRatingButton', () => { const props = { getLabelText: (value) => `${value} heart${value !== 1 ? 's' : ''}`, max: 5 }; initializeComponent(props); - page().hasLabels(props.getLabelText, props.max); + page().allInputsHaveAttr({ attr: 'aria-label', expectedValue: props.getLabelText, max: props.max }); }); }); @@ -156,4 +163,13 @@ describe('SfRatingButton', () => { }); }); }); + + describe('when custom icon', () => { + it('should render custom icons', () => { + const props = { children: isVue ? () =>

star

: () =>

star

}; + initializeComponent(props); + + page().makeSnapshot(); + }); + }); }); From 0936c222c333e46e79711b980572859cf6744933 Mon Sep 17 00:00:00 2001 From: dkacper Date: Wed, 14 Jun 2023 11:59:43 +0200 Subject: [PATCH 3/7] fix: adjust RatingButton showcases --- .../pages/showcases/RatingButton/Basic.tsx | 8 +--- .../showcases/RatingButton/CustomIcon.tsx | 38 +++++++++---------- .../showcases/RatingButton/MaxNumber.tsx | 8 +--- .../pages/showcases/RatingButton/Sizes.tsx | 6 +-- .../pages/showcases/RatingButton/Basic.vue | 5 +-- .../showcases/RatingButton/CustomIcon.vue | 35 ++++++++--------- .../showcases/RatingButton/MaxNumber.vue | 5 +-- .../SfRatingButton/SfRatingButton.tsx | 11 +++--- .../react/components/SfRatingButton/types.ts | 2 +- .../SfRatingButton/SfRatingButton.vue | 2 +- 10 files changed, 51 insertions(+), 69 deletions(-) diff --git a/apps/preview/next/pages/showcases/RatingButton/Basic.tsx b/apps/preview/next/pages/showcases/RatingButton/Basic.tsx index a17be4455e..a809cd1ba8 100644 --- a/apps/preview/next/pages/showcases/RatingButton/Basic.tsx +++ b/apps/preview/next/pages/showcases/RatingButton/Basic.tsx @@ -5,12 +5,8 @@ import { SfRatingButton } from '@storefront-ui/react'; export default function RatingButtonBasic() { const [rating, setRating] = useState(0); - return ( -
-

Select rating

- -
- ); + + return ; } // #endregion source diff --git a/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx b/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx index 22e0e82734..2d228bb3ad 100644 --- a/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx +++ b/apps/preview/next/pages/showcases/RatingButton/CustomIcon.tsx @@ -5,27 +5,25 @@ import { SfIconFavorite, SfIconFavoriteFilled, SfRatingButton } from '@storefron export default function RatingButtonCustomIcon() { const [rating, setRating] = useState(0); + return ( -
-

Select rating

- - {({ isFilled, iconSize }) => - isFilled ? ( - - ) : ( - - ) - } - -
+ + {({ isFilled, iconSize }) => + isFilled ? ( + + ) : ( + + ) + } + ); } diff --git a/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx b/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx index b342fc7b1a..7223d433ee 100644 --- a/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx +++ b/apps/preview/next/pages/showcases/RatingButton/MaxNumber.tsx @@ -5,12 +5,8 @@ import { SfRatingButton } from '@storefront-ui/react'; export default function RatingButtonMax() { const [rating, setRating] = useState(5); - return ( -
-

Select rating

- -
- ); + + return ; } // #endregion source diff --git a/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx b/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx index 345df1493c..c017803ec5 100644 --- a/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx +++ b/apps/preview/next/pages/showcases/RatingButton/Sizes.tsx @@ -4,9 +4,9 @@ import { useState } from 'react'; import { SfRatingButton } from '@storefront-ui/react'; export default function RatingButtonSizes() { - const [rating1, setRating1] = useState(5); - const [rating2, setRating2] = useState(5); - const [rating3, setRating3] = useState(5); + const [rating1, setRating1] = useState(0); + const [rating2, setRating2] = useState(0); + const [rating3, setRating3] = useState(0); return (
diff --git a/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue b/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue index 4a54ce3fac..27465fd0e0 100644 --- a/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue +++ b/apps/preview/nuxt/pages/showcases/RatingButton/Basic.vue @@ -1,8 +1,5 @@ diff --git a/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx index 0eae69815a..c743513c1b 100644 --- a/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx +++ b/packages/tests/components/SfRatingButton/SfRatingButton.cy.tsx @@ -23,7 +23,7 @@ describe('SfRatingButton', () => { const page = () => new SfRatingButtonBaseObject('ratingbutton'); const initializeComponent = (props: Props = {}) => { - const { value, onChange, max, name, disabled, label, size, getLabelText, children } = props; + const { value, onChange, max, name, disabled, label, size, getLabelText } = props; return mount({ vue: { component: SfRatingButtonVue, @@ -48,9 +48,7 @@ describe('SfRatingButton', () => { label={label} size={size} getLabelText={getLabelText} - > - {children} - + /> ), }); }; @@ -66,9 +64,11 @@ describe('SfRatingButton', () => { const props = { value: 6, max: 9, onChange: cy.spy() }; initializeComponent(props); - page().clickEmptyIcon(); + // index 0 means click first empty icon + page().clickEmptyIcon(0); cy.then(() => { - expect(props.onChange).to.be.calledOnce; + // so expected value passed to onChange/modelValue should be +1 to the current value + expect(props.onChange).calledOnceWith(props.value + 1); }); }); }); From 47bea10067cf10e186b63fa9d0e4efaa0ae9683f Mon Sep 17 00:00:00 2001 From: dkacper Date: Thu, 15 Jun 2023 11:07:16 +0200 Subject: [PATCH 7/7] fix: test interface import --- ...pass props to render function (failed).png | Bin 0 -> 173720 bytes .../SfRatingButton/SfRatingButton.cy.tsx | 21 +++++------------- 2 files changed, 6 insertions(+), 15 deletions(-) create mode 100644 apps/test/react/cypress/screenshots/SfRatingButton/SfRatingButton.cy.tsx/SfRatingButton -- when custom icon -- should pass props to render function (failed).png diff --git a/apps/test/react/cypress/screenshots/SfRatingButton/SfRatingButton.cy.tsx/SfRatingButton -- when custom icon -- should pass props to render function (failed).png b/apps/test/react/cypress/screenshots/SfRatingButton/SfRatingButton.cy.tsx/SfRatingButton -- when custom icon -- should pass props to render function (failed).png new file mode 100644 index 0000000000000000000000000000000000000000..817eb780303394cda05c9d80150c33d8eb39fa7f GIT binary patch literal 173720 zcmeFZcT`i`w?7&zpfo$ZSSU)D-cghis+5E#O?p>)2Swxv0up*xItdVZZ;FU?DIpRB zL^`2J2`!YjIG%gH=iJ{N2h(s3Hnm@B* zAn-kreME6Z#5Vc%!-nqJb5C4Z5-D)`1SS13gYdVKk@05ip4%_X7$;T3DU{Q!JTn5k zwkel_dY-H)G{9M{7oM=Dh8u2FXltHAL%GJ)o{%36LXo-lBOWd~t`zOej31Mwh zZbj)^Q+FxcG|Lhuo`+tgH1U@zRnpeZcpCAmsmMXD^(SY~PEN_gp>^CYf8MbDK_TV` z-GwkJEk%sJWe~~qj@r0D7)u`navcJFcwg5$ZF$_we{3gUjVSiV{THXd`#ET3Z71-K zZFoxm{PcSI8B>1bP(~_8{`8wMKgBUA+*n7aon~sD6E3GN-)Z~l^0%0DZ=-59eyUhR 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≺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 import React from 'react'; import { SfRatingButtonSize } from '@storefront-ui/shared'; +import { type SfRatingButtonProps } from '@storefront-ui/react'; import { mount, useComponent } from '../../utils/mount'; const { vue: SfRatingButtonVue, react: SfRatingButtonReact } = useComponent('SfRatingButton'); import SfRatingButtonBaseObject from './SfRatingButton.PageObject'; import { isReact } from '../../utils/utils'; -interface Props { - value?: number; - onChange?: (value: number) => void; - max?: number; - name?: string; - disabled?: boolean; - label?: string; - labelClassName?: string; - size?: `${SfRatingButtonSize}`; - getLabelText?: (value: number) => string; -} - describe('SfRatingButton', () => { const page = () => new SfRatingButtonBaseObject('ratingbutton'); - const initializeComponent = (props: Props = {}) => { - const { value, onChange, max, name, disabled, label, size, getLabelText } = props; + const initializeComponent = (props: SfRatingButtonProps = {}) => { + const { value, onChange, max, name, disabled, label, size, getLabelText, children } = props; return mount({ vue: { component: SfRatingButtonVue, @@ -48,7 +37,9 @@ describe('SfRatingButton', () => { label={label} size={size} getLabelText={getLabelText} - /> + > + {children} + ), }); };