DocSpace-client/web/ASC.Web.Components/src/components/icons/svg/create-styled-icon.js

49 lines
999 B
JavaScript
Raw Normal View History

2019-06-05 08:54:09 +00:00
import PropTypes from 'prop-types';
import styled, { css } from 'styled-components';
const iconSizes = {
small: 12,
medium: 16,
big: 24,
};
const getSizeStyle = size => {
switch (size) {
case 'scale':
return `
&:not(:root) {
width: 100%;
height: auto;
}
`;
case 'small':
case 'medium':
case 'big':
return `
width: ${iconSizes[size]}px;
height: ${iconSizes[size]}px;
`;
default:
return `
width: ${iconSizes.big}px;
height: ${iconSizes.big}px;
`;
}
};
export default function createStyledIcon(Component, displayName) {
const StyledComponent = styled(Component)(
props => `
* {
fill: ${props.color};
}
${getSizeStyle(props.size)}
`
);
StyledComponent.displayName = displayName;
StyledComponent.propTypes = {
color: PropTypes.string,
size: PropTypes.oneOf(['small', 'medium', 'big', 'scale']),
};
return StyledComponent;
}