import { OnlineUser } from '@/features/ide-react/context/online-users-context' import { Dropdown, DropdownHeader, DropdownItem, DropdownMenu, DropdownToggle, } from '@/features/ui/components/bootstrap-5/dropdown-menu' import OLTooltip from '@/features/ui/components/ol/ol-tooltip' import { getBackgroundColorForUserId, hslStringToLuminance, } from '@/shared/utils/colors' import classNames from 'classnames' import { useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' // Should be kept in sync with $max-user-circles-displayed CSS constant const MAX_USER_CIRCLES_DISPLAYED = 5 // We don't want a +1 circle since we could just show the user instead const MAX_USERS_WITH_OVERFLOW_VISIBLE = MAX_USER_CIRCLES_DISPLAYED - 1 export const OnlineUsersWidget = ({ onlineUsers, goToUser, }: { onlineUsers: OnlineUser[] goToUser: (user: OnlineUser) => void }) => { const hasOverflow = onlineUsers.length > MAX_USER_CIRCLES_DISPLAYED const usersBeforeOverflow = useMemo( () => hasOverflow ? onlineUsers.slice(0, MAX_USERS_WITH_OVERFLOW_VISIBLE) : onlineUsers, [onlineUsers, hasOverflow] ) const usersInOverflow = useMemo( () => hasOverflow ? onlineUsers.slice(MAX_USERS_WITH_OVERFLOW_VISIBLE) : [], [onlineUsers, hasOverflow] ) return (