UNPKG

@zohodesk/components

Version:

In this Package, we Provide Some Basic Components to Build Web App

140 lines (133 loc) 4.48 kB
import React, { memo } from 'react'; import { defaultProps } from "./props/defaultProps"; import { propTypes } from "./props/propTypes"; import { Icon } from '@zohodesk/icons'; import Avatar from "../Avatar/Avatar"; import { Container } from "../Layout"; import Button from "../semantic/Button/Button"; import { useUniqueId } from "../../Provider/IdProvider"; import style from "../../Tag/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'] }] */ function Tag(props) { 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, id } = props; const handleSelect = e => { e && e.preventDefault(); e.stopPropagation && e.stopPropagation(); e.nativeEvent.stopImmediatePropagation && e.nativeEvent.stopImmediatePropagation(); onSelectTag && onSelectTag(id, e); }; const handleRemove = e => { e && e.preventDefault(); e.stopPropagation && e.stopPropagation(); e.nativeEvent.stopImmediatePropagation && e.nativeEvent.stopImmediatePropagation(); onRemove && onRemove(id); }; const getRef = el => { let { getRef } = props; getRef && getRef(el, id); }; let { customTag = '', customTagClose = '', customTagIcon = '', customAvatar = '' } = customClass; let textSizes = size === 'small' ? style.smalltext : style.mediumtext; const getNextAriaId = useUniqueId(); const getAriaId = getNextAriaId(); let { clearLabel = 'Delete' } = a11y; let isDarkPalette = palette === 'dark'; return /*#__PURE__*/React.createElement("div", { 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: handleSelect, ref: getRef, "data-title": tooltip ? tooltip : text, tabIndex: disabled ? '-1' : '0', "aria-labelledby": getAriaId, "data-selector-id": dataSelectorId, ...customAttributes }, hasAvatar ? /*#__PURE__*/React.createElement("div", { className: style.avatar }, /*#__PURE__*/React.createElement(Avatar, { palette: isDarkPalette ? 'info' : avatarPalette, name: initial, size: "small", src: imageURL, textPalette: isDarkPalette ? 'white' : '', customClass: customAvatar })) : null, iconName ? /*#__PURE__*/React.createElement("div", { className: `${style.icon} ${customTagIcon}`, "aria-hidden": true }, /*#__PURE__*/React.createElement(Icon, { name: iconName, size: iconSize })) : 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 : ''} ${customTagClose} ${style[`close${closePalette}`]}`, dataId: `${dataId}_RemoveTag`, title: closeTitle, onClick: handleRemove, a11y: { ariaLabel: clearLabel } }, /*#__PURE__*/React.createElement(Container, { align: "both" }, /*#__PURE__*/React.createElement(Icon, { isBold: true, name: "ZD-close2", size: "8" })))); } Tag.defaultProps = defaultProps; Tag.propTypes = propTypes; const MemoizedTag = /*#__PURE__*/memo(Tag); MemoizedTag.propTypes = propTypes; MemoizedTag.defaultProps = defaultProps; MemoizedTag.displayName = 'Tag'; export default MemoizedTag;