joyent-portal/ui/src/components/widget/index.js

90 lines
1.7 KiB
JavaScript
Raw Normal View History

import { rndId, remcalc } from '../../shared/functions';
import { Baseline } from '../../shared/composers';
import { boxes } from '../../shared/constants';
import styled from 'styled-components';
import React from 'react';
2016-12-09 12:40:57 +02:00
const classNames = {
content: rndId()
};
2016-12-09 12:40:57 +02:00
const StyledInput = styled.input`
display: none;
visibility: hidden;
&:checked {
& ~ .${classNames.content} {
2016-12-09 12:40:57 +02:00
border: ${boxes.border.checked};
}
}
&:disabled {
& ~ .${classNames.content} {
2016-12-09 12:40:57 +02:00
cursor: not-allowed;
filter: grayscale(80%);
opacity: 0.4;
}
}
`;
const StyledContent = styled.div`
border: ${boxes.border.unchecked};
2017-01-12 21:04:52 +02:00
border-radius: ${remcalc(4)};
2016-12-09 12:40:57 +02:00
cursor: pointer;
padding: ${remcalc(36)};
2016-12-09 12:40:57 +02:00
& img {
max-width: 100%;
}
`;
2016-10-28 16:59:28 +03:00
const Widget = ({
checked = false,
2016-10-28 16:59:28 +03:00
children,
className,
disabled = false,
id,
name,
selectable = 'single',
style,
value = name
2016-10-28 16:59:28 +03:00
}) => {
const type = selectable === 'single' ? 'radio' : 'checkbox';
return (
<label
className={className}
htmlFor={value}
id={id}
>
2016-12-09 12:40:57 +02:00
<StyledInput
checked={checked}
disabled={disabled}
id={value}
2016-10-28 16:59:28 +03:00
name={name}
type={type}
value={value}
2016-10-28 16:59:28 +03:00
/>
<StyledContent className={classNames.content}>
2016-10-28 16:59:28 +03:00
{children}
2016-12-09 12:40:57 +02:00
</StyledContent>
2016-10-28 16:59:28 +03:00
</label>
);
};
Widget.propTypes = {
checked: React.PropTypes.bool,
children: React.PropTypes.node,
2016-10-28 16:59:28 +03:00
className: React.PropTypes.string,
disabled: React.PropTypes.bool,
id: React.PropTypes.string,
2016-10-28 16:59:28 +03:00
name: React.PropTypes.string,
selectable: React.PropTypes.string,
style: React.PropTypes.object,
value: React.PropTypes.string
2016-10-28 16:59:28 +03:00
};
export default Baseline(
2017-02-15 03:19:26 +02:00
Widget
);