Skip to content

Commit bfa8f48

Browse files
committed
Separate out types to make it more explicit
1 parent 5e0a7af commit bfa8f48

File tree

3 files changed

+46
-25
lines changed

3 files changed

+46
-25
lines changed

packages/gamut-labs/src/landingPage/Feature.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,33 @@ const FeatureBlock = styled.div`
3636
}
3737
`;
3838

39-
type FeaturedMediaProps = {
40-
featuresMedia?: 'image' | 'icon' | 'stat' | 'none';
41-
imgSrc?: string;
42-
imgAlt?: string;
43-
statText?: string;
39+
type FeaturedImageProps = {
40+
featuresMedia: 'image';
41+
imgSrc: string;
42+
imgAlt: string;
4443
};
4544

45+
type FeaturedIconProps = {
46+
featuresMedia: 'icon';
47+
imgSrc: string;
48+
imgAlt: string;
49+
};
50+
51+
type FeaturedStatProps = {
52+
featuresMedia: 'stat';
53+
statText: string;
54+
};
55+
56+
type FeaturedNoMediaProps = {
57+
featuresMedia: 'none';
58+
};
59+
60+
type FeaturedMediaProps =
61+
| FeaturedImageProps
62+
| FeaturedIconProps
63+
| FeaturedStatProps
64+
| FeaturedNoMediaProps;
65+
4666
const FeaturedMedia: React.FC<FeaturedMediaProps> = ({
4767
featuresMedia = 'none',
4868
...rest

packages/gamut-labs/src/landingPage/PageFeatures.tsx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ export type PageFeaturesProps = BaseProps & {
3838
};
3939

4040
const rowRenderEach = (
41-
items: PageFeaturesProps['features'],
42-
itemRenderer: (item: any) => ReactNode
41+
items: FeatureProps[],
42+
itemRenderer: (item: FeatureProps) => ReactNode
4343
): ReactNode => (
4444
<FlexContainer nowrap column>
4545
{items.map(itemRenderer)}
@@ -48,8 +48,8 @@ const rowRenderEach = (
4848

4949
const gridRenderEach = (
5050
maxCols: NonNullable<PageFeaturesProps['maxCols']>,
51-
items: any[],
52-
itemRenderer: (item: any) => ReactNode
51+
items: FeatureProps[],
52+
itemRenderer: (item: FeatureProps) => ReactNode
5353
): ReactNode => {
5454
const size = {
5555
xs: 12,
@@ -71,8 +71,8 @@ const gridRenderEach = (
7171

7272
const renderEach = (
7373
maxCols: PageFeaturesProps['maxCols'],
74-
items: any[],
75-
itemRenderer: (item: any) => ReactNode
74+
items: FeatureProps[],
75+
itemRenderer: (item: FeatureProps) => ReactNode
7676
): ReactNode => {
7777
if (maxCols === undefined) {
7878
return rowRenderEach(items, itemRenderer);
@@ -104,15 +104,20 @@ export const PageFeatures: React.FC<PageFeaturesProps> = ({
104104
</CTA>
105105
)}
106106
</div>
107-
{renderEach(maxCols, features, (feature) => (
108-
<Feature
109-
key={feature.title}
110-
{...feature}
111-
featuresMedia={
112-
featuresMedia ? featuresMedia : isIcon ? 'icon' : 'image'
113-
}
114-
onAnchorClick={onAnchorClick}
115-
/>
116-
))}
107+
{renderEach(
108+
maxCols,
109+
features.map((feature) => ({
110+
...feature,
111+
featuresMedia: featuresMedia
112+
? featuresMedia
113+
: isIcon
114+
? 'icon'
115+
: 'image',
116+
onAnchorClick,
117+
})) as FeatureProps[],
118+
(feature) => (
119+
<Feature key={feature.title} {...feature} />
120+
)
121+
)}
117122
</div>
118123
);

packages/gamut-labs/src/landingPage/__tests__/FeaturesSection-test.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,10 @@ describe('PageFeatures', () => {
6666
const wrapper = renderComponent({
6767
features: [
6868
{
69-
imgSrc: 'https://content.codecademy.com/courses/free/boba.svg',
70-
imgAlt: 'Codey boba tea',
7169
title: 'Software Engineer',
7270
desc: '**Software Engineer**. Example link [here](#).',
7371
},
7472
{
75-
imgSrc: 'https://content.codecademy.com/courses/free/boba.svg',
76-
imgAlt: 'Codey boba tea',
7773
title: 'Data Scientist',
7874
desc: '**Data Scientist**. Example link [here](#).',
7975
},

0 commit comments

Comments
 (0)