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

75 lines
1.7 KiB
JavaScript
Raw Normal View History

import React from 'react';
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: 100%;
2019-06-05 08:54:09 +00:00
}
`;
case 'small':
case 'medium':
case 'big':
return `
width: ${iconSizes[size]}px;
2019-07-10 09:48:36 +00:00
min-width: ${iconSizes[size]}px;
2019-06-05 08:54:09 +00:00
height: ${iconSizes[size]}px;
2019-07-10 09:48:36 +00:00
min-height: ${iconSizes[size]}px;
2019-06-05 08:54:09 +00:00
`;
default:
return `
width: ${iconSizes.big}px;
2019-07-10 09:48:36 +00:00
min-width: ${iconSizes.big}px;
2019-06-05 08:54:09 +00:00
height: ${iconSizes.big}px;
2019-07-10 09:48:36 +00:00
min-height: ${iconSizes.big}px;
2019-06-05 08:54:09 +00:00
`;
}
};
2019-08-05 10:25:18 +00:00
export default function createStyledIcon(Component, displayName, fillPath="*", strokePath="*") {
const Icon = ({ isfill, isStroke, color, stroke, fillPath, strokePath, ...props }) => {
//console.log(`Icon render ${displayName}`);
return (<Component {...props}></Component>);
};
const StyledIcon = styled(Icon)(
2019-06-05 08:54:09 +00:00
props => `
${props.fillPath} {
${props.isfill ? 'fill:' + props.color : ''};
2019-06-05 08:54:09 +00:00
}
${props.strokePath} {
${props.isStroke ? 'stroke:' + props.stroke : ''};
}
2019-06-05 08:54:09 +00:00
${getSizeStyle(props.size)}
`
);
StyledIcon.displayName = displayName;
StyledIcon.propTypes = {
2019-06-05 08:54:09 +00:00
color: PropTypes.string,
stroke: PropTypes.string,
2019-06-05 08:54:09 +00:00
size: PropTypes.oneOf(['small', 'medium', 'big', 'scale']),
isfill: PropTypes.bool,
isStroke: PropTypes.bool,
fillPath: PropTypes.string,
strokePath: PropTypes.string
2019-06-05 08:54:09 +00:00
};
StyledIcon.defaultProps = {
fillPath: fillPath,
strokePath: strokePath
}
return StyledIcon;
2019-06-05 08:54:09 +00:00
}