@zohodesk/components
Version:
Dot UI is a customizable React component library built to deliver a clean, accessible, and developer-friendly UI experience. It offers a growing set of reusable components designed to align with modern design systems and streamline application development
188 lines (179 loc) • 5.84 kB
JavaScript
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
/**** Libraries ****/
import React from 'react';
import { Box, Container } from "../Layout";
import ListContainer from "./ListContainer";
import { ListItemWithAvatarDefaultProps } from "./props/defaultProps";
import { ListItemWithAvatar_Props } from "./props/propTypes";
/**** Components ****/
import Avatar from "../Avatar/Avatar";
import AvatarTeam from "../AvatarTeam/AvatarTeam";
import { Icon } from '@zohodesk/icons';
/*** Utils ****/
import { renderNode, isRenderable } from '@zohodesk/utils';
/**** CSS ****/
import style from "./ListItem.module.css";
export default class ListItemWithAvatar extends React.PureComponent {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
this.getRef = this.getRef.bind(this);
this.handleMouseEnter = this.handleMouseEnter.bind(this);
}
getRef(ele) {
this.ele = ele;
let {
index,
getRef,
id
} = this.props;
getRef && getRef(ele, index, id);
}
handleClick(e) {
let {
onClick,
id,
value,
index
} = this.props;
onClick && onClick(id, value, index, e);
}
handleMouseEnter(e) {
let {
onMouseEnter,
id,
value,
index
} = this.props;
onMouseEnter && onMouseEnter(id, value, index, e);
}
render() {
let {
size,
active,
highlight,
value,
name,
imgSrc,
autoHover,
isTeam,
palette,
title,
needTick,
dataId,
dataSelectorId,
initial,
isDisabled,
needBorder,
disableTitle,
needAvatarTitle,
avatarPalette,
a11y,
customClass,
customProps,
needMultiLineText,
secondaryValue,
renderValueRightPlaceholderNode,
lhsAlignContent
} = this.props;
let {
ListItemProps = {},
ContainerProps = {},
AvatarTeamProps = {},
AvatarProps = {}
} = customProps;
let {
customListItem = '',
customAvatar = '',
customAvatarTeam = '',
customValueRightPlaceholder = ''
} = customClass;
const listA11y = {
ariaHidden: true,
role: 'option',
...a11y
};
let {
ariaHidden
} = listA11y;
let isDarkPalette = palette === 'dark';
let dataIdString = value ? value : dataId;
return /*#__PURE__*/React.createElement(ListContainer, _extends({
a11y: listA11y,
size: size,
palette: palette,
highlight: highlight,
isDisabled: isDisabled,
active: active,
autoHover: autoHover,
needTick: needTick,
needBorder: needBorder,
customClass: customListItem,
dataId: `${dataIdString}_ListItemWithAvatar`,
dataSelectorId: `${dataSelectorId}`,
onClick: this.handleClick,
onMouseEnter: this.handleMouseEnter,
eleRef: this.getRef,
disableTitle: disableTitle,
title: null,
customProps: ListItemProps
}, ContainerProps), /*#__PURE__*/React.createElement(Box, {
className: style.contentWrapper
}, name || imgSrc ? /*#__PURE__*/React.createElement("div", {
className: `${style.leftAvatar}`
}, /*#__PURE__*/React.createElement(Box, {
align: lhsAlignContent,
className: `${style.lhsBoxInner} ${style.alignLhsBox_center}`
}, isTeam ? /*#__PURE__*/React.createElement(AvatarTeam, _extends({
name: name,
size: "small",
src: imgSrc,
needTitle: needAvatarTitle,
textPalette: isDarkPalette ? 'white' : '',
palette: isDarkPalette ? 'info' : avatarPalette,
customClass: {
customAvatar: customAvatar,
customAvatarTeam: customAvatarTeam
}
}, AvatarTeamProps)) : /*#__PURE__*/React.createElement(Avatar, _extends({
name: name,
size: "small",
src: imgSrc,
initial: initial,
textPalette: isDarkPalette ? 'white' : '',
needTitle: needAvatarTitle,
palette: isDarkPalette ? 'info' : avatarPalette,
customClass: customAvatar
}, AvatarProps)))) : null, /*#__PURE__*/React.createElement(Box, {
flexible: true,
className: `${style.leftBox} ${style.selfAlign_center}`
}, /*#__PURE__*/React.createElement(Box, {
className: style.titleBox
}, value ? /*#__PURE__*/React.createElement(Box, {
shrink: true,
adjust: true,
"data-title": isDisabled ? null : title,
className: needMultiLineText ? style.multiLineValue : style.value
}, value) : null, isRenderable(renderValueRightPlaceholderNode) ? /*#__PURE__*/React.createElement(Box, {
className: customValueRightPlaceholder
}, renderNode(renderValueRightPlaceholderNode)) : null), secondaryValue ? /*#__PURE__*/React.createElement(Box, {
"data-title": isDisabled ? null : secondaryValue,
className: `${style.secondaryField} ${needMultiLineText ? style.multiLine : style.secondaryValue}`
}, secondaryValue) : null), needTick && active ? /*#__PURE__*/React.createElement(Box, {
className: style.tickIcon,
"aria-hidden": ariaHidden,
dataId: `${dataIdString}_tickIcon`,
dataSelectorId: `${dataSelectorId}_tickIcon`
}, /*#__PURE__*/React.createElement(Icon, {
name: "ZD-ticknew",
size: "8"
})) : null));
}
}
ListItemWithAvatar.defaultProps = ListItemWithAvatarDefaultProps;
ListItemWithAvatar.propTypes = ListItemWithAvatar_Props; // if (__DOCS__) {
// ListItemWithAvatar.docs = {
// componentGroup: 'Molecule',
// folderName: 'Style Guide'
// };
// }