@nodeject/ui-components
Version:
UI library for non-trivial components
108 lines (107 loc) • 5.01 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);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import { Avatar as AntdAvatar, Tooltip } from 'antd';
import cc from 'classcat';
import * as React from 'react';
import { memo, useState } from 'react';
import { stringToColour } from '../helpers';
import * as styles from './Avatar.module.less';
export var Avatar = memo(function (props) {
var _a;
var className = props.className, display = props.display, id = props.id, picture = props.picture, size = props.size, tooltip = props.tooltip, style = props.style;
var _b = useDetectAvatarType({ picture: picture }), isPictureless = _b.isPictureless, onError = _b.onError;
var avatar = isPictureless ? (React.createElement(LetterAvatar, { generateBackgroundColorField: props.generateBackgroundColorField || id, initials: getInitials({ str: display }), size: size })) : (React.createElement(AntdAvatar, { src: picture, size: size, onError: onError }));
var avatarWrapperClassName = cc((_a = {},
_a[styles.avatarWrapper] = true,
_a.avatar = true,
_a[className] = Boolean(className),
_a));
var avatarWrapper = (React.createElement("span", { className: avatarWrapperClassName, style: style },
React.createElement("div", { className: styles.avatarWhiteBackground }),
avatar,
React.createElement("div", { className: styles.avatarOutline })));
return tooltip ? (React.createElement(Tooltip, { title: React.createElement(React.Fragment, null,
React.createElement("div", null, display),
React.createElement("div", null, id)), placement: "bottomRight", mouseEnterDelay: 0.7, trigger: ['click', 'hover'] }, avatarWrapper)) : (avatarWrapper);
});
Avatar.defaultProps = {
tooltip: true
};
var LetterAvatar = function (_a) {
var generateBackgroundColorField = _a.generateBackgroundColorField, initials = _a.initials, size = _a.size;
return (React.createElement(AntdAvatar, { style: {
background: stringToColour(generateBackgroundColorField)
}, size: size },
React.createElement("span", { style: {
mixBlendMode: 'exclusion',
fontSize: size === 'large' ? 'large' : 'medium',
fontWeight: size === 'large' ? 600 : 'normal'
} }, initials)));
};
var useDetectAvatarType = function (_a) {
var picture = _a.picture;
var _b = useState(!Boolean(picture)), isPictureless = _b[0], setIsPictureless = _b[1];
React.useEffect(function () {
setIsPictureless(!picture);
}, [picture]);
var onError = React.useCallback(function () {
setIsPictureless(true);
return true;
}, [setIsPictureless]);
return {
isPictureless: isPictureless,
onError: onError
};
};
export var AvatarButton = function (props) {
var _a;
// ommit onAvatarClick, to re-create appropriate props for Avatar without onAvatarClick
var className = props.className, onAvatarClick = props.onAvatarClick, avatarProps = __rest(props, ["className", "onAvatarClick"]);
var onBtnClick = function () {
if (onAvatarClick) {
onAvatarClick(props.id);
}
else {
console.warn('Please provide a onAvatarClick method to AvatarList');
}
};
var btnClassName = cc((_a = {},
_a[styles.avatarBtn] = true,
_a[className] = Boolean(className),
_a));
return (React.createElement("button", { className: btnClassName, onClick: onBtnClick },
React.createElement(Avatar, __assign({}, avatarProps))));
};
var getInitials = function (args) {
var str = args.str;
var initials;
var spaceCount = (str === null || str === void 0 ? void 0 : str.split(' ').length) - 1;
if (spaceCount === 0) {
initials = str === null || str === void 0 ? void 0 : str.substr(0, 2);
}
else {
initials =
(str === null || str === void 0 ? void 0 : str.split(' ').map(function (n, i, a) { return (i === 0 || i + 1 === a.length ? n[0] : null); }).join('')) || ''.toUpperCase();
}
return initials;
};