| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- /*
- Copyright (C) 2017 Cloudbase Solutions SRL
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as
- published by the Free Software Foundation, either version 3 of the
- License, or (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- // @flow
- import React from 'react'
- import { observer } from 'mobx-react'
- import styled from 'styled-components'
- import Palette from '../../styleUtils/Palette'
- import StyleProps from '../../styleUtils/StyleProps'
- import checkedImage from './images/checked.svg'
- const Wrapper = styled.div`
- ${props => props.disabled ? 'opacity: 0.5;' : ''}
- ${props => props.disabledLoading ? StyleProps.animations.disabledLoading : ''}
- `
- const LabelStyled = styled.label`
- display: flex;
- `
- const Text = styled.div`
- margin-left: 16px;
- `
- const InputStyled = styled.input`
- width: 16px;
- height: 16px;
- border: 1px solid ${Palette.grayscale[3]};
- border-radius: 50%;
- background: white;
- appearance: none;
- outline: 0;
- transition: all ${StyleProps.animations.swift};
- position: relative;
- margin: 0;
- cursor: pointer;
- &:checked {
- background: url('${checkedImage}') center no-repeat;
- border-color: transparent;
- }
- `
- type Props = {
- label: string,
- disabledLoading?: boolean,
- disabled?: boolean,
- }
- @observer
- class RadioInput extends React.Component<Props> {
- render() {
- let disabled = this.props.disabled || this.props.disabledLoading
- return (
- <Wrapper {...this.props} disabled={disabled} disabledLoading={this.props.disabledLoading}>
- <LabelStyled>
- <InputStyled type="radio" {...this.props} disabled={disabled} data-test-id="radioInput-input" />
- <Text data-test-id="radioInput-label">{this.props.label}</Text>
- </LabelStyled>
- </Wrapper>
- )
- }
- }
- export default RadioInput
|