diff --git a/lib/shared/avatar-utils.js b/lib/shared/avatar-utils.js new file mode 100644 --- /dev/null +++ b/lib/shared/avatar-utils.js @@ -0,0 +1,46 @@ +// @flow + +import stringHash from 'string-hash'; + +import { selectedThreadColors } from './thread-utils.js'; +import type { EmojiAvatar } from '../types/avatar-types.js'; + +const defaultEmojiAvatars: $ReadOnlyArray = [ + { color: selectedThreadColors[7], emoji: '😀' }, + { color: selectedThreadColors[0], emoji: '😆' }, + { color: selectedThreadColors[1], emoji: '🤩' }, + { color: selectedThreadColors[7], emoji: '🏈' }, + { color: selectedThreadColors[2], emoji: '👻' }, + { color: selectedThreadColors[3], emoji: '🧑‍🚀' }, + { color: selectedThreadColors[4], emoji: '🎩' }, + { color: selectedThreadColors[5], emoji: '🍦' }, + { color: selectedThreadColors[6], emoji: '🚀' }, + { color: selectedThreadColors[8], emoji: '🥰' }, + { color: selectedThreadColors[3], emoji: '🐬' }, + { color: selectedThreadColors[4], emoji: '🍀' }, + { color: selectedThreadColors[9], emoji: '🍕' }, + { color: selectedThreadColors[0], emoji: '🙄' }, + { color: selectedThreadColors[1], emoji: '🥳' }, + { color: selectedThreadColors[7], emoji: '🥸' }, + { color: selectedThreadColors[2], emoji: '🦋' }, + { color: selectedThreadColors[9], emoji: '🏆' }, + { color: selectedThreadColors[5], emoji: '🎲' }, + { color: selectedThreadColors[8], emoji: '🏀' }, +]; + +function getAvatarForUser( + user: ?{ +avatar?: ?EmojiAvatar, +username?: ?string, ... }, +): EmojiAvatar { + if (user?.avatar) { + return user.avatar; + } + + if (!user?.username) { + return defaultEmojiAvatars[0]; + } + + const avatarIndex = stringHash(user.username) % defaultEmojiAvatars.length; + return defaultEmojiAvatars[avatarIndex]; +} + +export { getAvatarForUser }; diff --git a/lib/types/avatar-types.js b/lib/types/avatar-types.js new file mode 100644 --- /dev/null +++ b/lib/types/avatar-types.js @@ -0,0 +1,6 @@ +// @flow + +export type EmojiAvatar = { + +emoji: string, + +color: string, +};