UNPKG

@bigfishtv/cockpit

Version:

73 lines (69 loc) 1.94 kB
import PropTypes from 'prop-types' import React, { Component } from 'react' import classnames from 'classnames' import Icon from '../Icon' /** * Default cell used by Tree component, typically wrapped by TreeItem for drag-drop functionality */ export default class TreeCell extends Component { static propTypes = { /** Main text to display in cell */ title: PropTypes.node, isCollapsed: PropTypes.bool, /** another item is being dragged over this one */ isOver: PropTypes.bool, selected: PropTypes.bool, dragging: PropTypes.bool, collapsed: PropTypes.bool, /** is being dragged */ selectedDrag: PropTypes.bool, /** show the chevron */ showIndicator: PropTypes.bool, /** position of other item being dragged over this one */ position: PropTypes.oneOf(['into', 'above', 'below']), onIndicatorClick: PropTypes.func, onIndicatorDoubleClick: PropTypes.func, onClick: PropTypes.func, onDoubleClick: PropTypes.func, } static defaultProps = { title: '', onIndicatorClick: () => {}, onIndicatorDoubleClick: () => {}, onClick: () => {}, onDoubleClick: () => {}, } render() { const { isCollapsed, selectedDrag, showIndicator, onIndicatorClick, onIndicatorDoubleClick, title, isOver, position, onClick, onDoubleClick, selected, } = this.props return ( <div className={classnames('tree-item', isOver && 'drag-' + position)}> <div className={classnames('tree-cell', { dragging: selectedDrag, selected: selected })} onClick={onClick} onDoubleClick={onDoubleClick}> {showIndicator && ( <div className={classnames('tree-cell-icon', isCollapsed && 'collapsed')} onClick={onIndicatorClick} onDoubleClick={onIndicatorDoubleClick}> <Icon name={'chevron-' + (isCollapsed ? 'right' : 'down')} size="18" /> </div> )} <div className="tree-cell-title">{title}</div> </div> </div> ) } }