55 lines
1.2 KiB
JavaScript
55 lines
1.2 KiB
JavaScript
|
// @flow
|
||
|
|
||
|
import _ from 'lodash';
|
||
|
|
||
|
const AVATAR_COLORS = [
|
||
|
'232, 105, 156',
|
||
|
'255, 198, 115',
|
||
|
'128, 128, 255',
|
||
|
'105, 232, 194',
|
||
|
'234, 255, 128'
|
||
|
];
|
||
|
|
||
|
const AVATAR_OPACITY = 0.4;
|
||
|
|
||
|
/**
|
||
|
* Generates the background color of an initials based avatar.
|
||
|
*
|
||
|
* @param {string?} initials - The initials of the avatar.
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
export function getAvatarColor(initials: ?string) {
|
||
|
let colorIndex = 0;
|
||
|
|
||
|
if (initials) {
|
||
|
let nameHash = 0;
|
||
|
|
||
|
for (const s of initials) {
|
||
|
nameHash += s.codePointAt(0);
|
||
|
}
|
||
|
|
||
|
colorIndex = nameHash % AVATAR_COLORS.length;
|
||
|
}
|
||
|
|
||
|
return `rgba(${AVATAR_COLORS[colorIndex]}, ${AVATAR_OPACITY})`;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generates initials for a simple string.
|
||
|
*
|
||
|
* @param {string?} s - The string to generate initials for.
|
||
|
* @returns {string?}
|
||
|
*/
|
||
|
export function getInitials(s: ?string) {
|
||
|
// We don't want to use the domain part of an email address, if it is one
|
||
|
const initialsBasis = _.split(s, '@')[0];
|
||
|
const words = _.words(initialsBasis);
|
||
|
let initials = '';
|
||
|
|
||
|
for (const w of words) {
|
||
|
(initials.length < 2) && (initials += w.substr(0, 1).toUpperCase());
|
||
|
}
|
||
|
|
||
|
return initials;
|
||
|
}
|