import { createElement, memo } from 'react'; import PropTypes from 'prop-types'; import evilIcons from 'evil-icons/assets/sprite.svg'; /** * @typedef {object} IconProps * @property {string} size * @property {string=} className * @property {string} name * @property {boolean=} noFill */ /** * Icon inner component * @param {IconProps} props - icon props */ function IconElement(props) { var size = props.size ? ' icon--' + props.size : ''; var className = props.className ? ' ' + props.className : ''; var klass = 'icon' + (!props.noFill ? ' icon--' + props.name : '') + size + className; var name = '#' + props.name + '-icon'; var useTag = ``; var Icon = createElement('svg', { className: 'icon__cnt', dangerouslySetInnerHTML: { __html: useTag } }); return createElement( 'div', { className: klass }, wrapSpinner(Icon, klass) ); } /** * @param {import('react').ReactElement} Html * @param {string} klass */ function wrapSpinner(Html, klass) { if (klass.indexOf('spinner') > -1) { return createElement( 'div', { className: 'icon__spinner' }, Html ); } else { return Html; } } export default memo(IconElement); IconElement.propTypes = { size: PropTypes.string.isRequired, name: PropTypes.string.isRequired, className: PropTypes.string, noFill: PropTypes.bool };