Skip to content

Commit

Permalink
Separate out types to make it more explicit
Browse files Browse the repository at this point in the history
  • Loading branch information
judahtanthony committed Jan 27, 2021
1 parent 5e0a7af commit bfa8f48
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 25 deletions.
30 changes: 25 additions & 5 deletions packages/gamut-labs/src/landingPage/Feature.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,33 @@ const FeatureBlock = styled.div`
}
`;

type FeaturedMediaProps = {
featuresMedia?: 'image' | 'icon' | 'stat' | 'none';
imgSrc?: string;
imgAlt?: string;
statText?: string;
type FeaturedImageProps = {
featuresMedia: 'image';
imgSrc: string;
imgAlt: string;
};

type FeaturedIconProps = {
featuresMedia: 'icon';
imgSrc: string;
imgAlt: string;
};

type FeaturedStatProps = {
featuresMedia: 'stat';
statText: string;
};

type FeaturedNoMediaProps = {
featuresMedia: 'none';
};

type FeaturedMediaProps =
| FeaturedImageProps
| FeaturedIconProps
| FeaturedStatProps
| FeaturedNoMediaProps;

const FeaturedMedia: React.FC<FeaturedMediaProps> = ({
featuresMedia = 'none',
...rest
Expand Down
37 changes: 21 additions & 16 deletions packages/gamut-labs/src/landingPage/PageFeatures.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ export type PageFeaturesProps = BaseProps & {
};

const rowRenderEach = (
items: PageFeaturesProps['features'],
itemRenderer: (item: any) => ReactNode
items: FeatureProps[],
itemRenderer: (item: FeatureProps) => ReactNode
): ReactNode => (
<FlexContainer nowrap column>
{items.map(itemRenderer)}
Expand All @@ -48,8 +48,8 @@ const rowRenderEach = (

const gridRenderEach = (
maxCols: NonNullable<PageFeaturesProps['maxCols']>,
items: any[],
itemRenderer: (item: any) => ReactNode
items: FeatureProps[],
itemRenderer: (item: FeatureProps) => ReactNode
): ReactNode => {
const size = {
xs: 12,
Expand All @@ -71,8 +71,8 @@ const gridRenderEach = (

const renderEach = (
maxCols: PageFeaturesProps['maxCols'],
items: any[],
itemRenderer: (item: any) => ReactNode
items: FeatureProps[],
itemRenderer: (item: FeatureProps) => ReactNode
): ReactNode => {
if (maxCols === undefined) {
return rowRenderEach(items, itemRenderer);
Expand Down Expand Up @@ -104,15 +104,20 @@ export const PageFeatures: React.FC<PageFeaturesProps> = ({
</CTA>
)}
</div>
{renderEach(maxCols, features, (feature) => (
<Feature
key={feature.title}
{...feature}
featuresMedia={
featuresMedia ? featuresMedia : isIcon ? 'icon' : 'image'
}
onAnchorClick={onAnchorClick}
/>
))}
{renderEach(
maxCols,
features.map((feature) => ({
...feature,
featuresMedia: featuresMedia
? featuresMedia
: isIcon
? 'icon'
: 'image',
onAnchorClick,
})) as FeatureProps[],
(feature) => (
<Feature key={feature.title} {...feature} />
)
)}
</div>
);
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,10 @@ describe('PageFeatures', () => {
const wrapper = renderComponent({
features: [
{
imgSrc: 'https://content.codecademy.com/courses/free/boba.svg',
imgAlt: 'Codey boba tea',
title: 'Software Engineer',
desc: '**Software Engineer**. Example link [here](#).',
},
{
imgSrc: 'https://content.codecademy.com/courses/free/boba.svg',
imgAlt: 'Codey boba tea',
title: 'Data Scientist',
desc: '**Data Scientist**. Example link [here](#).',
},
Expand Down

0 comments on commit bfa8f48

Please sign in to comment.