react-toolbox/components/chip/Chip.js

55 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-04-02 14:37:21 +03:00
import React, {PropTypes} from 'react';
2016-05-21 19:17:01 +03:00
import classnames from 'classnames';
import { themr } from 'react-css-themr';
import Avatar from '../avatar';
2016-04-02 14:37:21 +03:00
2016-05-21 19:17:01 +03:00
const Chip = ({children, className, deletable, onDeleteClick, theme, ...other}) => {
let hasAvatar = false;
if (React.Children.count(children)) {
const firstChild = children[0];
hasAvatar = firstChild && firstChild.type && firstChild.type === Avatar;
}
2016-05-21 19:17:01 +03:00
const classes = classnames(theme.chip, {
[theme.deletable]: !!deletable,
[theme.avatar]: !!hasAvatar
2016-04-02 14:37:21 +03:00
}, className);
return (
<div data-react-toolbox='chip' className={classes} {...other}>
{typeof children === 'string' ? <span>{children}</span> : children}
2016-04-02 14:37:21 +03:00
{
deletable ? (
2016-05-21 19:17:01 +03:00
<span className={theme.delete} onClick={onDeleteClick}>
<svg viewBox="0 0 40 40" className={theme.deleteIcon}>
<path className={theme.deleteX} d="M 12,12 L 28,28 M 28,12 L 12,28" />
</svg>
2016-04-02 14:37:21 +03:00
</span>
) : null
}
</div>
);
};
Chip.propTypes = {
2016-04-04 12:34:48 +03:00
children: PropTypes.node,
2016-04-02 14:37:21 +03:00
className: PropTypes.string,
deletable: PropTypes.bool,
2016-05-21 19:17:01 +03:00
onDeleteClick: PropTypes.func,
theme: React.PropTypes.shape({
avatar: React.PropTypes.string.isRequired,
chip: React.PropTypes.string.isRequired,
deletable: React.PropTypes.string.isRequired,
delete: React.PropTypes.string.isRequired,
deleteIcon: React.PropTypes.string.isRequired,
deleteX: React.PropTypes.string.isRequired
})
2016-04-02 14:37:21 +03:00
};
Chip.defaultProps = {
className: '',
deletable: false
2016-04-02 14:37:21 +03:00
};
2016-05-21 19:17:01 +03:00
export default themr('ToolboxChip')(Chip);