From c35a4817d42bffee8c71916ee9e814c01afce94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20V=C3=A1clav=C3=ADk?= Date: Wed, 29 Jan 2025 14:06:03 +0100 Subject: [PATCH] fix(ds): Fix RadioCard frameProps (#16685) --- .../RadioCard/RadioCard.stories.tsx | 9 +++- .../src/components/RadioCard/RadioCard.tsx | 41 +++++++++++-------- packages/components/src/utils/frameProps.tsx | 15 +++++-- 3 files changed, 44 insertions(+), 21 deletions(-) diff --git a/packages/components/src/components/RadioCard/RadioCard.stories.tsx b/packages/components/src/components/RadioCard/RadioCard.stories.tsx index abe700143f5..3cfd238c5b6 100644 --- a/packages/components/src/components/RadioCard/RadioCard.stories.tsx +++ b/packages/components/src/components/RadioCard/RadioCard.stories.tsx @@ -1,6 +1,11 @@ import { Meta, StoryObj } from '@storybook/react'; -import { RadioCard as RadioCardComponent, RadioCardProps } from './RadioCard'; +import { + RadioCard as RadioCardComponent, + RadioCardProps, + allowedRadioCardFrameProps, +} from './RadioCard'; +import { getFramePropsStory } from '../../utils/frameProps'; const meta: Meta = { title: 'RadioCard', @@ -12,6 +17,7 @@ export const RadioCard: StoryObj = { args: { isActive: true, children: 'Content', + ...getFramePropsStory(allowedRadioCardFrameProps).args, }, argTypes: { isActive: { @@ -19,5 +25,6 @@ export const RadioCard: StoryObj = { type: 'boolean', }, }, + ...getFramePropsStory(allowedRadioCardFrameProps).argTypes, }, }; diff --git a/packages/components/src/components/RadioCard/RadioCard.tsx b/packages/components/src/components/RadioCard/RadioCard.tsx index 1b8dc042614..7034f7d2e15 100644 --- a/packages/components/src/components/RadioCard/RadioCard.tsx +++ b/packages/components/src/components/RadioCard/RadioCard.tsx @@ -7,12 +7,15 @@ import { palette, borders, spacingsPx } from '@trezor/theme'; import { Card } from '../Card/Card'; import { Icon } from '../Icon/Icon'; import { Box } from '../Box/Box'; -import { FrameProps } from '../../utils/frameProps'; +import { FrameProps, FramePropsKeys, pickAndPrepareFrameProps } from '../../utils/frameProps'; + +export const allowedRadioCardFrameProps = ['margin'] as const satisfies FramePropsKeys[]; +type AllowedFrameProps = Pick; export type RadioCardProps = { isActive: boolean; children: ReactNode; -}; +} & AllowedFrameProps; const BorderActive = styled.div<{ isActive: boolean }>` pointer-events: none; @@ -33,18 +36,22 @@ const IconWrapper = styled.div` padding: ${spacingsPx.xxxs}; `; -export const RadioCard = ({ isActive, children, ...frameProps }: RadioCardProps & FrameProps) => ( - - {isActive && ( - - - - - - )} - - {children} - - - -); +export const RadioCard = ({ isActive, children, ...rest }: RadioCardProps) => { + const frameProps = pickAndPrepareFrameProps(rest, allowedRadioCardFrameProps, false); + + return ( + + {isActive && ( + + + + + + )} + + {children} + + + + ); +}; diff --git a/packages/components/src/utils/frameProps.tsx b/packages/components/src/utils/frameProps.tsx index 1997a10013b..46275925a47 100644 --- a/packages/components/src/utils/frameProps.tsx +++ b/packages/components/src/utils/frameProps.tsx @@ -85,11 +85,20 @@ const getValueWithUnit = (value: string | number) => export const pickAndPrepareFrameProps = ( props: Record, allowedFrameProps: Array, -) => - makePropsTransient( - allowedFrameProps.reduce((acc, item) => ({ ...acc, [item]: props[item] }), {}), + convertToTransient = true, +) => { + const selectedProps = allowedFrameProps.reduce( + (acc, item) => ({ ...acc, [item]: props[item] }), + {}, ); + if (convertToTransient) { + return makePropsTransient(selectedProps); + } + + return selectedProps; +}; + export const withFrameProps = ({ $margin, $padding,