UNPKG

@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

164 lines (156 loc) • 5.59 kB
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); } import React, { PureComponent } from 'react'; import { defaultProps } from "./props/defaultProps"; import { propTypes } from "./props/propTypes"; import { renderNode } from '@zohodesk/utils'; import { Icon } from '@zohodesk/icons'; import Avatar from "../Avatar/Avatar"; import { Container } from "../Layout"; import Button from "../semantic/Button/Button"; import { getUniqueId } from "../Provider/IdProvider"; import style from "./Tag.module.css"; /* * eslint css-modules/no-unused-class: [2, { markAsUsed: ['small', 'medium', * 'closedanger', 'closeprimary', 'default', 'danger', 'secondary', * 'pureDotted', 'primaryDotted'] }] */ /* * eslint css-modules/no-unused-class: [2, { markAsUsed: ['small', 'medium', * 'closedanger', 'closeprimary', 'default', 'danger', 'secondary', * 'pureDotted', 'primaryDotted'] }] */ export default class Tag extends PureComponent { constructor(props) { super(props); this.handleSelect = this.handleSelect.bind(this); this.handleRemove = this.handleRemove.bind(this); this.getRef = this.getRef.bind(this); this.getNextAriaId = getUniqueId(this); } handleSelect(e) { let { id, onSelectTag = null } = this.props; e && e.preventDefault(); e.stopPropagation && e.stopPropagation(); e.nativeEvent.stopImmediatePropagation && e.nativeEvent.stopImmediatePropagation(); onSelectTag && onSelectTag(id, e); } handleRemove(e) { let { onRemove, id } = this.props; e && e.preventDefault(); e.stopPropagation && e.stopPropagation(); e.nativeEvent.stopImmediatePropagation && e.nativeEvent.stopImmediatePropagation(); onRemove && onRemove(id, e); } getRef(el) { let { getRef, id } = this.props; getRef && getRef(el, id); } render() { let { imageURL, hasAvatar, text, onRemove, initial, active, size, rounded, palette, disabled, closePalette, onSelectTag, closeTitle, dataId, dataSelectorId, iconName, iconSize, tooltip, avatarPalette, customClass, customAttributes, a11y, needEffect, isReadOnly, renderLeftChildren, renderRightChildren, customProps } = this.props; const { avatarProps = {}, iconProps = {} } = customProps; let { customTag = '', customTagClose = '', customTagIcon = '', customAvatar = '' } = customClass; let textSizes = size === 'small' ? style.smalltext : style.mediumtext; let getAriaId = this.getNextAriaId(); let { clearLabel = 'Delete' } = a11y; let isDarkPalette = palette === 'dark'; return /*#__PURE__*/React.createElement("div", _extends({ className: `${style.container} ${needEffect && !isReadOnly ? style.effect : style.readonly} ${active ? `${style.selected} ${style[`active${palette}`]}` : ''} ${onRemove ? active ? `${style[`active${size}Effect`]}` : '' : ''} ${style[size]} ${rounded ? style.lgRadius : style.smRadius} ${style[palette]} ${disabled ? style.disabled : ''} ${onSelectTag ? style.pointer : ''} ${customTag}`, "data-id": active ? `${dataId}_TagSelected` : `${dataId}_Tag`, "data-test-id": active ? `${dataId}_TagSelected` : `${dataId}_Tag`, onClick: this.handleSelect, ref: this.getRef, "data-title": tooltip ? tooltip : text, tabIndex: disabled ? '-1' : '0', "aria-labelledby": getAriaId, "data-selector-id": dataSelectorId }, customAttributes), renderNode(renderLeftChildren), hasAvatar ? /*#__PURE__*/React.createElement("div", { className: style.avatar }, /*#__PURE__*/React.createElement(Avatar, _extends({ palette: isDarkPalette ? 'info' : avatarPalette, name: initial, size: "small", src: imageURL, textPalette: isDarkPalette ? 'white' : '', customClass: customAvatar }, avatarProps))) : null, iconName ? /*#__PURE__*/React.createElement("div", { className: `${style.icon} ${customTagIcon}`, "aria-hidden": true }, /*#__PURE__*/React.createElement(Icon, _extends({ name: iconName, size: iconSize }, iconProps))) : null, /*#__PURE__*/React.createElement("div", { className: `${style.text} ${textSizes}`, "aria-hidden": true, id: getAriaId }, text), onRemove && /*#__PURE__*/React.createElement(Button, { customClass: `${style.close} ${active ? style[`active${closePalette}Close`] : ''} ${rounded ? style.lgRadiusClose : style.smRadiusClose} ${isDarkPalette ? style.darkTagClose : ''} ${style[`close${closePalette}`]} ${customTagClose}`, dataId: `${dataId}_RemoveTag`, title: closeTitle, onClick: this.handleRemove, a11y: { ariaLabel: clearLabel } }, /*#__PURE__*/React.createElement(Container, { align: "both" }, /*#__PURE__*/React.createElement(Icon, { isBold: true, name: "ZD-close2", size: "8" }))), renderNode(renderRightChildren)); } } Tag.defaultProps = defaultProps; Tag.propTypes = propTypes; // if (__DOCS__) { // Tag.docs = { // componentGroup: 'Molecule', // folderName: 'Style Guide' // }; // }