mirror of
https://github.com/freeCodeCamp/freeCodeCamp.git
synced 2026-05-28 18:26:54 +00:00
refactor: make superblock icon a React component (#51901)
This commit is contained in:
@@ -40,14 +40,14 @@ const iconMap = {
|
|||||||
[SuperBlocks.UpcomingPython]: PythonIcon
|
[SuperBlocks.UpcomingPython]: PythonIcon
|
||||||
};
|
};
|
||||||
|
|
||||||
const generateIconComponent = (
|
type SuperBlockIconProps = {
|
||||||
superBlock: SuperBlocks,
|
superBlock: SuperBlocks;
|
||||||
className: string
|
} & React.SVGProps<SVGSVGElement>;
|
||||||
): JSX.Element => {
|
|
||||||
|
export function SuperBlockIcon(props: SuperBlockIconProps): JSX.Element {
|
||||||
|
const { superBlock, className } = props;
|
||||||
// fallback in case super block doesn't exist and for tests
|
// fallback in case super block doesn't exist and for tests
|
||||||
const Icon = iconMap[superBlock] ? iconMap[superBlock] : ResponsiveDesign;
|
const Icon = iconMap[superBlock] ? iconMap[superBlock] : ResponsiveDesign;
|
||||||
|
|
||||||
return <Icon className={className} />;
|
return <Icon className={className} {...props} />;
|
||||||
};
|
}
|
||||||
|
|
||||||
export { generateIconComponent };
|
|
||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
getFirstNotAuditedSuperBlock,
|
getFirstNotAuditedSuperBlock,
|
||||||
superBlockOrder
|
superBlockOrder
|
||||||
} from '../../../../shared/config/superblocks';
|
} from '../../../../shared/config/superblocks';
|
||||||
import { generateIconComponent } from '../../assets/icons';
|
import { SuperBlockIcon } from '../../assets/icons/superblock-icon';
|
||||||
import LinkButton from '../../assets/icons/link-button';
|
import LinkButton from '../../assets/icons/link-button';
|
||||||
import { Link, Spacer } from '../helpers';
|
import { Link, Spacer } from '../helpers';
|
||||||
import { getSuperBlockTitleForMap } from '../../utils/superblock-map-titles';
|
import { getSuperBlockTitleForMap } from '../../utils/superblock-map-titles';
|
||||||
@@ -77,7 +77,7 @@ function MapLi({
|
|||||||
>
|
>
|
||||||
<Link className='btn link-btn btn-lg' to={`/learn/${superBlock}/`}>
|
<Link className='btn link-btn btn-lg' to={`/learn/${superBlock}/`}>
|
||||||
<div style={linkSpacingStyle}>
|
<div style={linkSpacingStyle}>
|
||||||
{generateIconComponent(superBlock, 'map-icon')}
|
<SuperBlockIcon className='map-icon' superBlock={superBlock} />
|
||||||
{getSuperBlockTitleForMap(superBlock)}
|
{getSuperBlockTitleForMap(superBlock)}
|
||||||
</div>
|
</div>
|
||||||
{landing && <LinkButton />}
|
{landing && <LinkButton />}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { SuperBlocks } from '../../../../../shared/config/superblocks';
|
import { SuperBlocks } from '../../../../../shared/config/superblocks';
|
||||||
import { generateIconComponent } from '../../../assets/icons';
|
import { SuperBlockIcon } from '../../../assets/icons/superblock-icon';
|
||||||
import { Spacer } from '../../../components/helpers';
|
import { Spacer } from '../../../components/helpers';
|
||||||
|
|
||||||
interface SuperBlockIntroProps {
|
interface SuperBlockIntroProps {
|
||||||
@@ -29,7 +29,7 @@ function SuperBlockIntro(props: SuperBlockIntroProps): JSX.Element {
|
|||||||
{i18nSuperBlock}
|
{i18nSuperBlock}
|
||||||
</h1>
|
</h1>
|
||||||
<Spacer size='medium' />
|
<Spacer size='medium' />
|
||||||
{generateIconComponent(superBlock, 'cert-header-icon')}
|
<SuperBlockIcon className='cert-header-icon' superBlock={superBlock} />
|
||||||
<Spacer size='medium' />
|
<Spacer size='medium' />
|
||||||
{superBlockIntroText.map((str, i) => (
|
{superBlockIntroText.map((str, i) => (
|
||||||
<p key={i}>{str}</p>
|
<p key={i}>{str}</p>
|
||||||
|
|||||||
Reference in New Issue
Block a user