import { GeneratedPropTypes } from '../types'; import { SizeType, setSize } from '../utils/setSize'; import { generateProps } from 'styled-gen'; import React from 'react'; // @ts-ignore: generated file import icons from '../icons/ui'; import styled from 'styled-components'; const renderPaths = (icon: { paths: any }) => icon.paths.map((path: any, index: number) => ( )); type IconProps = { icon: string; size?: SizeType; onClick?: () => void; } & GeneratedPropTypes; type IconSvgProps = { size?: SizeType; }; const IconSvg = styled.svg` fill: currentColor; flex-shrink: 0; vertical-align: middle; ${({ size }: IconSvgProps) => !!size && setSize(size)}; ${generateProps}; `; export const Icon: React.FC = props => { const { icon, onClick, ...otherProps } = props; const selectedIcon = icons[icon] as any; if (!selectedIcon) { console.log(`Icon not found: ${icon}`); return null; } if (!selectedIcon.viewbox) { console.log(`Viewbox issue with the icon: ${icon}`); return null; } return ( {renderPaths(selectedIcon)} ); }; Icon.defaultProps = { size: 1 };