@swrve/core
Version:
Core set of Swrve UI Components
102 lines (90 loc) • 2.51 kB
JSX
import React from 'react'
import classNames from 'classnames'
import propTypes from 'prop-types'
import { Icon } from '@swrve/icons'
class Chip extends React.Component {
render() {
const { children, className, id, theme, onDelete, innerRef, ...rest } = this.props
const isLightTheme = theme === 'cloudWhite'
const rootChipClassname = classNames(
'sw-chip rounded-full text-xs inline-block relative',
{
'cursor-pointer': onDelete,
'text-cloudWhite': !isLightTheme,
'text-jungleBlack border border-bombayGrey': isLightTheme
},
'max-w-full',
[`bg-${theme}-100`],
className
)
const iconClassname = classNames(
'sw-chip-button cursor-pointer mr-1 align-middle focus:outline-none h-4',
{
'cursor-pointer': onDelete,
'text-bombayGrey hover:text-jungleBlack focus:text-jungleBlack': isLightTheme,
[`text-${theme}-50 hover:text-cloudWhite focus:text-cloudWhite`]: !isLightTheme
}
)
const labelClassnames = classNames(
'flex items-center align-middle whitespace-no-wrap select-none truncate',
{
'px-3': !onDelete,
'pl-3 pr-2': onDelete
}
)
const handleDeleteClick = event => {
onDelete(event, id)
}
const handleKeyPress = event => {
// Delete Key
if (event.keyCode === 8) {
onDelete(event, id)
}
}
return (
<div ref={innerRef} className={rootChipClassname} contentEditable={false}>
<span {...rest} className={labelClassnames}>
{children}
</span>
{onDelete && (
<button className={iconClassname} onClick={handleDeleteClick} onKeyDown={handleKeyPress}>
<Icon name="cancel" />
</button>
)}
</div>
)
}
}
Chip.displayName = 'Chip'
Chip.propTypes = {
/** InnerRef */
innerRef: propTypes.func,
/** Prop type description */
children: propTypes.node,
/** Extra CSS custom classes */
className: propTypes.string,
/** Callback triggered on delete click event */
onDelete: propTypes.func,
/** Determines main style */
theme: propTypes.oneOf([
'primary',
'secondary',
'warning',
'radicalRed',
'dodgerBlue',
'pictonBlue',
'javaGreen',
'limaGreen',
'frenchRoseRed',
'sunglowYellow',
'electricViolet',
'royalBlue',
'lazyLavender',
'orangePeel',
'cloudWhite'
])
}
Chip.defaultProps = {
theme: 'secondary'
}
export default Chip