web: components: Radiobutton re-written to Icons components + removed useless svg checkbox icons with different states

This commit is contained in:
Daniil Senkiv 2019-08-02 17:32:25 +03:00
parent 093f22b2f1
commit 52e88db947

View File

@ -1,29 +1,16 @@
import React from 'react'; import React from 'react';
import ReactDOMServer from 'react-dom/server'; import ReactDOMServer from 'react-dom/server';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import styled from 'styled-components'; import styled, { css } from 'styled-components';
import { Icons } from '../icons'; import { Icons } from '../icons';
import { getCssFromSvg } from '../icons/get-css-from-svg'; import { getCssFromSvg } from '../icons/get-css-from-svg';
import { Text } from '../text'; import { Text } from '../text';
const activeColor = '#000000', const activeColor = '#000000',
disableColor = '#A3A9AE'; disableColor = '#A3A9AE';
const hoverColor = disableColor;
var radiobuttonIcon, const internalCircleDisabledColor = '#D0D5DA';
radiobuttonHoveredIcon, const externalCircleDisabledColor = '#eceef1';
radiobuttonСheckedIcon,
radiobuttonCheckedHoveredIcon,
radiobuttonDisabledIcon,
radiobuttonDisabledCheckedIcon;
(function () {
radiobuttonIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonIcon />));
radiobuttonHoveredIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonHoverIcon />));
radiobuttonСheckedIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonCheckedIcon />));
radiobuttonCheckedHoveredIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonHoverCheckedIcon />));
radiobuttonDisabledIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonDisabledIcon />));
radiobuttonDisabledCheckedIcon = getCssFromSvg(ReactDOMServer.renderToString(<Icons.RadiobuttonDisabledCheckedIcon />));
}());
const Span = styled.span` const Span = styled.span`
display: flex; display: flex;
@ -34,37 +21,31 @@ const Span = styled.span`
cursor: ${props => !props.isDisabled && 'pointer'}; cursor: ${props => !props.isDisabled && 'pointer'};
.radiobutton { .radiobutton {
line-height: 16px; margin-right: 4px;
margin-bottom: 2px;
display: inline-block;
vertical-align: middle;
border: 0 none;
outline: none;
width: 16px;
height: 16px;
background-repeat: no-repeat;
background-image: url("data:image/svg+xml,${radiobuttonIcon}");
&:hover {
background-image: url("data:image/svg+xml,${radiobuttonHoveredIcon}");
}
&.checked {
background-image: url("data:image/svg+xml,${radiobuttonСheckedIcon}");
&:hover {
background-image: url("data:image/svg+xml,${radiobuttonCheckedHoveredIcon}");
}
&.disabled {
background-image: url("data:image/svg+xml,${radiobuttonDisabledCheckedIcon}");
}
}
&.disabled {
background-image: url("data:image/svg+xml,${radiobuttonDisabledIcon}");
}
} }
${props =>
props.isDisabled
? css`
cursor: default;
path:first-child {
stroke: ${externalCircleDisabledColor};
}
path:nth-child(even) {
fill: ${internalCircleDisabledColor};
}
`
: css`
cursor: pointer;
&:hover {
svg {
path:first-child {
stroke: ${hoverColor};
}
}
}
`}
`; `;
const Input = styled.input` const Input = styled.input`
@ -76,7 +57,6 @@ const Input = styled.input`
const TextBody = ({ isDisabled, ...props }) => <Text.Body {...props} />; const TextBody = ({ isDisabled, ...props }) => <Text.Body {...props} />;
const StyledText = styled(TextBody)` const StyledText = styled(TextBody)`
margin-left: 4px;
color: ${props => props.isDisabled ? disableColor : activeColor}; color: ${props => props.isDisabled ? disableColor : activeColor};
`; `;
@ -86,6 +66,24 @@ const StyledSpan = styled.span`
} }
`; `;
const RadiobuttonIcon = ({ isChecked, isDisabled }) => {
const iconName = isChecked
? "RadiobuttonCheckedIcon"
: "RadiobuttonIcon";
let newProps = {
size: "medium",
className: "radiobutton"
};
if (isDisabled) {
newProps.isfill = true;
newProps.color = "#F8F9F9";
};
return <>{React.createElement(Icons[iconName], { ...newProps })}</>;
};
class RadioButton extends React.Component { class RadioButton extends React.Component {
constructor(props) { constructor(props) {
@ -105,10 +103,6 @@ class RadioButton extends React.Component {
render() { render() {
const rbtnClassName = 'radiobutton' +
(this.state.isChecked ? ' checked' : '') +
(this.props.isDisabled ? ' disabled' : '');
return ( return (
<StyledSpan spacing={this.props.spacing}> <StyledSpan spacing={this.props.spacing}>
<label> <label>
@ -122,8 +116,7 @@ class RadioButton extends React.Component {
this.props.onClick && this.props.onClick(e); this.props.onClick && this.props.onClick(e);
}} }}
disabled={this.props.isDisabled} /> disabled={this.props.isDisabled} />
<RadiobuttonIcon {...this.props} />
<span className={rbtnClassName} />
<StyledText tag='span' isDisabled={this.props.isDisabled}>{this.props.label || this.props.value}</StyledText> <StyledText tag='span' isDisabled={this.props.isDisabled}>{this.props.label || this.props.value}</StyledText>
</Span> </Span>
</label> </label>