@momentum-ui/react-collaboration
Version:
Cisco Momentum UI Framework for React Collaboration Applications
124 lines • 7.98 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import React, { useCallback, useState } from 'react';
import classnames from 'classnames';
import { v4 as uuidV4 } from 'uuid';
import { DEFAULTS, STYLE } from './SpaceRowContent.constants';
import './SpaceRowContent.style.scss';
import ListItemBaseSection from '../ListItemBaseSection';
import Text from '../Text';
import Icon from '../Icon';
import DividerDot from '../DividerDot';
import SecondLineElement from './SecondLineElement';
import { cleanSecondLine } from './SpaceRowContent.utils';
import ButtonCircle from '../ButtonCircle';
import { MenuPopover as MdcMenuPopover, MenuItem as MdcMenuItem, } from '@momentum-design/components/dist/react';
//TODO: support 2-line labels for right/position-end section.
/**
* The SpaceRowContent component.
* @deprecated Use the equivalent from momentum.design (NPM: `@momentum-design/components/dist/react`)
*/
var SpaceRowContent = function (props) {
var _a;
var isNewActivity = props.isNewActivity, isDraft = props.isDraft, avatar = props.avatar, firstLine = props.firstLine, secondLine = props.secondLine, isUnread = props.isUnread, _b = props.teamColor, teamColor = _b === void 0 ? DEFAULTS.TEAM_COLOR : _b, isMention = props.isMention, isEnterRoom = props.isEnterRoom, isAlert = props.isAlert, isAlertMuted = props.isAlertMuted, isError = props.isError, action = props.action, isSelected = props.isSelected, _c = props.isCompact, isCompact = _c === void 0 ? false : _c, rightIconTooltip = props.rightIconTooltip, _d = props.isDisabled, isDisabled = _d === void 0 ? DEFAULTS.DISABLED : _d, menuItems = props.menuItems, onSelectMenuItem = props.onSelectMenuItem, menuTriggerLabel = props.menuTriggerLabel;
var menuId = useState(uuidV4)[0];
var isSecondLineReactElement = React.isValidElement(secondLine);
var renderText = function () {
var secondLineArrayClean = !isSecondLineReactElement
? cleanSecondLine(secondLine)
: [];
// All --mds-color-theme-text-team* tokens have a dash before the color --mds-color-theme-text-team-cobalt-* --mds-color-theme-text-team-cyan-* etc
// except for --mds-color-theme-teamdefault-*
var teamColorForToken = teamColor === DEFAULTS.TEAM_COLOR ? teamColor : "-".concat(teamColor);
var secondLineColor = isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: "var(--mds-color-theme-text-team".concat(teamColorForToken, "-normal)");
if (secondLineArrayClean.length || isSecondLineReactElement) {
return (React.createElement(React.Fragment, null,
React.createElement(Text, { type: "body-primary", tagName: "div", "data-test": "list-item-first-line", "data-disabled": isDisabled }, firstLine),
isCompact && React.createElement(DividerDot, { "data-test": "compact-mode-divider-dot" }),
React.createElement(Text, { style: { color: secondLineColor }, type: "body-secondary", tagName: "small", "data-test": "list-item-second-line", "aria-label": !isSecondLineReactElement ? secondLineArrayClean.join(', ') : undefined }, isSecondLineReactElement
? secondLine
: secondLineArrayClean.map(function (secondLineContent, i) { return (React.createElement(SecondLineElement, { key: "second-line-item-".concat(i), showDividerDot: i > 0 }, secondLineContent)); }))));
}
else {
return (React.createElement(Text, { "data-test": "list-item-first-line", tagName: "div", type: "body-primary", "data-disabled": isDisabled }, firstLine));
}
};
var renderRightSection = function () {
var iconProps = {
weight: 'bold',
scale: 14,
strokeColor: 'none',
title: rightIconTooltip,
};
if (isMention) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-control-active-normal)', name: "mention" }, iconProps)));
}
else if (isEnterRoom) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-control-active-normal)', name: "enter-room" }, iconProps)));
}
else if (isAlertMuted) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-text-primary-normal)', name: "alert-muted" }, iconProps)));
}
else if (isAlert) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-text-primary-normal)', name: "alert" }, iconProps)));
}
else if (!isSelected && isDraft) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-text-primary-normal)', name: "draft-indicator" }, iconProps)));
}
else if (isError) {
return (React.createElement(Icon, __assign({ fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-text-error-normal)', name: "priority-circle" }, iconProps, { weight: "filled" })));
}
else if (isUnread) {
return (React.createElement(Icon, __assign({ name: "unread", fillColor: isDisabled
? 'var(--mds-color-theme-text-primary-disabled)'
: 'var(--mds-color-theme-control-active-normal)' }, iconProps)));
}
else if (action) {
return React.createElement(React.Fragment, null, action);
}
else
return null;
};
var onMenuAction = useCallback(function (_a) {
var target = _a.target;
onSelectMenuItem === null || onSelectMenuItem === void 0 ? void 0 : onSelectMenuItem(target.name);
}, [onSelectMenuItem]);
return (React.createElement(React.Fragment, null,
React.createElement(ListItemBaseSection, { position: "start" }, avatar),
React.createElement(ListItemBaseSection, { position: "middle", className: classnames(STYLE.textWrapper, isCompact ? 'text-row' : 'text-column', (_a = {},
_a[STYLE.isNewActivity] = isNewActivity || isMention || isEnterRoom || isUnread,
_a)) }, renderText()),
React.createElement(ListItemBaseSection, { position: "end" }, renderRightSection()),
(menuItems === null || menuItems === void 0 ? void 0 : menuItems.length) ? (React.createElement(ListItemBaseSection, { position: "end", className: STYLE.menuTriggerWrapper },
React.createElement(ButtonCircle, { id: menuId, variant: "tertiary", size: isCompact ? 20 : 28, "aria-label": menuTriggerLabel, "data-testid": "menu-trigger-button", prefixIcon: "more-bold" }),
React.createElement(MdcMenuPopover, { onAction: onMenuAction, showArrow: true, triggerID: menuId, placement: "bottom-end" }, menuItems.map(function (_a) {
var key = _a.key, text = _a.text;
return (React.createElement(MdcMenuItem, { key: key, name: key, label: text }));
})))) : null));
};
SpaceRowContent.displayName = 'SpaceRowContent';
export default SpaceRowContent;
//# sourceMappingURL=SpaceRowContent.js.map