UNPKG

@krowdy-ui/views

Version:

React components that implement Google's Material Design.

169 lines (161 loc) 6.04 kB
import React from 'react'; import PropTypes from 'prop-types'; import XDate from 'xdate'; import { DragIndicator as DragIndicatorIcon } from '@material-ui/icons'; import useStyles from './node-content-renderer-style'; import { Chip, Typography, Tooltip } from '@krowdy-ui/core'; function isDescendant(older, younger) { return !!older.children && typeof older.children !== 'function' && older.children.some(function (child) { return child === younger || isDescendant(child, younger); }); } function cutValue(value, size) { return value.length > size ? value.slice(0, size) + '...' : value; } var ChipContainer = function ChipContainer(props) { var label = props.label, size = props.size, dots = props.dots; if (label.length <= size || !dots) return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Chip, { color: "primary", label: label, size: "small", variant: "outlined" }));else return /*#__PURE__*/React.createElement(Tooltip, { title: label }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Chip, { color: "primary", label: cutValue(label, size), size: "small", variant: "outlined" }))); }; var Content = function Content(_ref) { var value = _ref.value, variant = _ref.variant, color = _ref.color, size = _ref.size, dots = _ref.dots; if (value.length <= size || !dots) return /*#__PURE__*/React.createElement(Typography, { color: color, variant: variant }, value);else return /*#__PURE__*/React.createElement(Tooltip, { title: value }, /*#__PURE__*/React.createElement(Typography, { color: color, variant: variant }, cutValue(value, size))); }; var _ref2 = /*#__PURE__*/React.createElement(DragIndicatorIcon, null); function FileThemeNodeContentRenderer(props) { var connectDragPreview = props.connectDragPreview, connectDragSource = props.connectDragSource, isDragging = props.isDragging, dots = props.dots, canDrop = props.canDrop, node = props.node, draggedNode = props.draggedNode, buttons = props.buttons, className = props.className, didDrop = props.didDrop; var classes = useStyles(); // const nodeTitle = title || node.title var isDraggedDescendant = draggedNode && isDescendant(draggedNode, node); var isLandingPadActive = !didDrop && isDragging; var nodeContent = /*#__PURE__*/React.createElement("div", { className: classes.nodeContent }, connectDragPreview( /*#__PURE__*/React.createElement("div", { className: classes.rowWrapper }, connectDragSource( /*#__PURE__*/React.createElement("div", { className: classes.contentDrag }, _ref2)), /*#__PURE__*/React.createElement("div", { className: classes.row + (isLandingPadActive ? " ".concat(classes.rowLandingPad) : '') + (isLandingPadActive && !canDrop ? " ".concat(classes.rowCancelPad) : '') + (className ? " ".concat(className) : ''), style: { opacity: isDraggedDescendant ? 0.5 : 1 } }, /*#__PURE__*/React.createElement("div", { // className={classes.rowLabel} className: classes.rowPanelLeft }, /*#__PURE__*/React.createElement("div", { className: classes.rowContentTitle }, /*#__PURE__*/React.createElement(Content, { color: "body", dots: dots, size: 15, value: node.label, variant: "body2" }), /*#__PURE__*/React.createElement(Content, { color: "info", dots: dots, size: 20, value: node.operatorLabel, variant: "info1" })), node.value ? /*#__PURE__*/React.createElement("div", { className: classes.rowContentChips }, Array.isArray(node.value) ? node.value.map(function (value, indexValue) { var label = node.type === 'date' ? new XDate(value.label || value).toString('dd/MM/yyyy') : value.label || value; return /*#__PURE__*/React.createElement(ChipContainer, { dots: dots, key: "chip-".concat(1 + indexValue), label: label, size: 10 }); }) : /*#__PURE__*/React.createElement(ChipContainer, { dots: dots, label: node.type === 'date' ? new XDate(node.value).toString('dd/MM/yyyy') : node.value, size: 10 })) : null), /*#__PURE__*/React.createElement("div", { // className={classes.rowToolbar} className: classes.rowPanelRight }, buttons))))); return nodeContent; } FileThemeNodeContentRenderer.defaultProps = { buttons: null, canDrag: false, canDrop: false, className: '', draggedNode: null, isSearchFocus: false, isSearchMatch: false, label: null, parentNode: null, style: {}, swapDepth: null, swapFrom: null, swapLength: null, toggleChildrenVisibility: null }; process.env.NODE_ENV !== "production" ? FileThemeNodeContentRenderer.propTypes = { buttons: PropTypes.node, canDrag: PropTypes.bool, canDrop: PropTypes.bool, className: PropTypes.string, connectDragPreview: PropTypes.func.isRequired, connectDragSource: PropTypes.func.isRequired, didDrop: PropTypes.bool.isRequired, draggedNode: PropTypes.shape({}), isDragging: PropTypes.bool.isRequired, isOver: PropTypes.bool.isRequired, isSearchFocus: PropTypes.bool, isSearchMatch: PropTypes.bool, label: PropTypes.oneOfType([PropTypes.func, PropTypes.node]), listIndex: PropTypes.number.isRequired, lowerSiblingCounts: PropTypes.arrayOf(PropTypes.number).isRequired, node: PropTypes.shape({}).isRequired, parentNode: PropTypes.shape({}), path: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number])).isRequired, rowDirection: PropTypes.string.isRequired, // Drag and drop API functions // Drag source scaffoldBlockPxWidth: PropTypes.number.isRequired, style: PropTypes.shape({}), swapDepth: PropTypes.number, swapFrom: PropTypes.number, swapLength: PropTypes.number, toggleChildrenVisibility: PropTypes.func, // Needed for dndManager // Drop target treeId: PropTypes.string.isRequired, treeIndex: PropTypes.number.isRequired } : void 0; export default FileThemeNodeContentRenderer;