import React from 'react' import PropTypes from 'prop-types' import { useTranslation } from 'react-i18next' import { Dropdown, DropdownHeader, DropdownItem, DropdownMenu, DropdownToggle, } from '@/features/ui/components/bootstrap-5/dropdown-menu' import { getBackgroundColorForUserId } from '@/shared/utils/colors' import OLTooltip from '@/features/ui/components/ol/ol-tooltip' import MaterialIcon from '@/shared/components/material-icon' function OnlineUsersWidget({ onlineUsers, goToUser }) { const { t } = useTranslation() const shouldDisplayDropdown = onlineUsers.length >= 4 if (shouldDisplayDropdown) { return ( {onlineUsers.map((user, index) => (
  • goToUser(user)} >
  • ))}
    ) } else { return (
    {onlineUsers.map((user, index) => ( {/* OverlayTrigger won't fire unless UserIcon is wrapped in a span */} ))}
    ) } } OnlineUsersWidget.propTypes = { onlineUsers: PropTypes.arrayOf( PropTypes.shape({ user_id: PropTypes.string.isRequired, name: PropTypes.string.isRequired, }) ).isRequired, goToUser: PropTypes.func.isRequired, } function UserIcon({ user, showName, onClick }) { const backgroundColor = getBackgroundColorForUserId(user.user_id) function handleOnClick() { onClick?.(user) } const [character] = [...user.name] return ( // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions {character} {showName && user.name} ) } UserIcon.propTypes = { user: PropTypes.shape({ user_id: PropTypes.string.isRequired, name: PropTypes.string.isRequired, }), showName: PropTypes.bool, onClick: PropTypes.func, } const DropDownToggleButton = React.forwardRef((props, ref) => { const { t } = useTranslation() return ( ) }) DropDownToggleButton.displayName = 'DropDownToggleButton' DropDownToggleButton.propTypes = { onlineUserCount: PropTypes.number.isRequired, onClick: PropTypes.func, } export default OnlineUsersWidget