UNPKG

chayns-components

Version:

A set of beautiful React components for developing chayns® applications.

201 lines (198 loc) 8.81 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _clsx = _interopRequireDefault(require("clsx")); var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireWildcard(require("react")); var _Icon = _interopRequireDefault(require("../../../react-chayns-icon/component/Icon")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* eslint-disable react/forbid-prop-types */ const ListItemHeader = _ref => { let { title, subtitle, image, icon, className, left, right, circle = false, hoverItem, onLongPress, longPressTimeout = 450, onMouseDown, onMouseMove, onMouseUp, onTouchStart, onTouchMove, onTouchEnd, onTouchCancel, onClick, notExpandable, noContentClass, onOpen, headerProps, defaultOpen, images, imageBorderColor, openImageOnClick = 'rgba(var(--chayns-color-rgb--009), .08)', // eslint-disable-next-line react/prop-types headMultiline, // eslint-disable-next-line react/prop-types headerClassName, ...otherProps } = _ref; const timeout = (0, _react.useRef)(null); const preventClick = (0, _react.useRef)(false); const onStart = event => { if (event.type === 'mousedown' && onMouseDown) { onMouseDown(event); } else if (event.type === 'touchstart' && onTouchStart) { onTouchStart(event); } if (onLongPress) { timeout.current = setTimeout(() => { preventClick.current = true; onLongPress(event); }, longPressTimeout); } }; const onEnd = event => { if (event.type === 'mousemove' && onMouseMove) { onMouseMove(event); } else if (event.type === 'mouseup' && onMouseUp) { onMouseUp(event); } else if (event.type === 'touchmove' && onTouchMove) { onTouchMove(event); } else if (event.type === 'touchend' && onTouchEnd) { onTouchEnd(event); } else if (event.type === 'touchcancel' && onTouchCancel) { onTouchCancel(event); } if (onLongPress) { clearTimeout(timeout.current); if (event.type === 'mouseup' || event.type === 'touchend') { setTimeout(() => { preventClick.current = false; }, 150); } } }; const handleClick = event => { if (onLongPress && preventClick.current) { preventClick.current = false; } else if (onClick) { onClick(event); } }; return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ className: (0, _clsx.default)('list-item__header', className), onMouseDown: onMouseDown || onLongPress ? onStart : null, onMouseMove: onMouseMove || onLongPress ? onEnd : null, onMouseUp: onMouseUp || onLongPress ? onEnd : null, onTouchStart: onTouchStart || onLongPress ? onStart : null, onTouchMove: onTouchMove || onLongPress ? onEnd : null, onTouchEnd: onTouchEnd || onLongPress ? onEnd : null, onTouchCancel: onTouchCancel || onLongPress ? onEnd : null, onClick: handleClick }, otherProps), left, image && /*#__PURE__*/_react.default.createElement("div", { className: 'list-item__image' + (circle ? " list-item__image--circle" : ""), style: { boxShadow: `0 0 0 1px ${imageBorderColor} inset`, backgroundImage: `url(${image})` }, onClick: event => { if (openImageOnClick) { event.stopPropagation(); chayns.openImage(image); } } }), images && /*#__PURE__*/_react.default.createElement("div", { className: 'list-item__images' + (circle ? " list-item__image--circle" : ""), style: { boxShadow: `0 0 0 1px ${imageBorderColor} inset` }, onClick: event => { if (openImageOnClick) { event.stopPropagation(); chayns.openImage(images); } } }, images.map((img, index) => { if (index > 2) return null; return /*#__PURE__*/_react.default.createElement("div", { key: img, className: "list-item__image", style: { backgroundImage: `url(${img})` } }); })), icon && /*#__PURE__*/_react.default.createElement(_Icon.default, { className: 'list-item__icon chayns__background-color--102 chayns__color--headline' + (circle ? " list-item__icon--circle" : ""), icon: icon }), (title || subtitle) && /*#__PURE__*/_react.default.createElement("div", { className: "list-item__titles" }, (title || Array.isArray(right) && right.length > 0) && (Array.isArray(right) && right.length > 0 ? /*#__PURE__*/_react.default.createElement("div", { className: "list-item__title-wrapper" }, /*#__PURE__*/_react.default.createElement("div", { className: "list-item__title ellipsis" }, title || ''), /*#__PURE__*/_react.default.createElement("div", { className: "list-item__right", style: typeof right[0] === 'string' ? { opacity: 0.75 } : null }, right[0])) : /*#__PURE__*/_react.default.createElement("div", { className: "list-item__title ellipsis" }, title)), (subtitle || Array.isArray(right) && right.length > 1) && (Array.isArray(right) && right.length > 1 ? /*#__PURE__*/_react.default.createElement("div", { className: "list-item__subtitle-wrapper" }, /*#__PURE__*/_react.default.createElement("div", { className: "list-item__subtitle ellipsis" }, subtitle), /*#__PURE__*/_react.default.createElement("div", { className: "list-item__right" }, right[1])) : /*#__PURE__*/_react.default.createElement("div", { className: "list-item__subtitle ellipsis" }, subtitle))), /*#__PURE__*/_react.default.createElement("div", { className: "list-item__spacer" }), right && !Array.isArray(right) && /*#__PURE__*/_react.default.createElement("div", { className: "list-item__right" }, right), hoverItem && /*#__PURE__*/_react.default.createElement("div", { className: "list-item__hover-item", tabIndex: -1 }, hoverItem)); }; ListItemHeader.propTypes = { title: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]).isRequired, subtitle: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]), image: _propTypes.default.string, images: _propTypes.default.arrayOf(_propTypes.default.string), openImageOnClick: _propTypes.default.bool, icon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.object]), className: _propTypes.default.string, left: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]), right: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]), circle: _propTypes.default.bool, hoverItem: _propTypes.default.node, onLongPress: _propTypes.default.func, onMouseDown: _propTypes.default.func, onMouseMove: _propTypes.default.func, onMouseUp: _propTypes.default.func, onTouchStart: _propTypes.default.func, onTouchMove: _propTypes.default.func, onTouchEnd: _propTypes.default.func, onTouchCancel: _propTypes.default.func, onClick: _propTypes.default.func, longPressTimeout: _propTypes.default.number, notExpandable: _propTypes.default.bool, noContentClass: _propTypes.default.bool, onOpen: _propTypes.default.func, headerProps: _propTypes.default.object, defaultOpen: _propTypes.default.bool, imageBorderColor: _propTypes.default.string }; ListItemHeader.displayName = 'ListItemHeader'; var _default = ListItemHeader; exports.default = _default; //# sourceMappingURL=ListItemHeader.js.map