mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-15 07:34:42 -04:00
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
/*
|
|
* SPDX-FileCopyrightText: 2022 The HedgeDoc developers (see AUTHORS file)
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
import { UserAvatar } from '../../../common/user-avatar/user-avatar'
|
|
import { UserAvatarForUsername } from '../../../common/user-avatar/user-avatar-for-username'
|
|
import { createCursorCssClass } from '../../editor-pane/codemirror-extensions/remote-cursors/create-cursor-css-class'
|
|
import { ActiveIndicator } from '../users-online-sidebar-menu/active-indicator'
|
|
import styles from './user-line.module.scss'
|
|
import React, { useMemo } from 'react'
|
|
|
|
export interface UserLineProps {
|
|
username: string | null
|
|
displayName: string
|
|
active: boolean
|
|
color: number
|
|
}
|
|
|
|
/**
|
|
* Represents a user in the realtime activity status.
|
|
*
|
|
* @param username The name of the user to show.
|
|
* @param color The color of the user's edits.
|
|
* @param status The user's current online status.
|
|
*/
|
|
export const UserLine: React.FC<UserLineProps> = ({ username, displayName, active, color }) => {
|
|
const avatar = useMemo(() => {
|
|
if (username) {
|
|
return (
|
|
<UserAvatarForUsername
|
|
username={username}
|
|
additionalClasses={'flex-fill overflow-hidden px-2 text-nowrap w-100'}
|
|
/>
|
|
)
|
|
} else {
|
|
return (
|
|
<UserAvatar displayName={displayName} additionalClasses={'flex-fill overflow-hidden px-2 text-nowrap w-100'} />
|
|
)
|
|
}
|
|
}, [displayName, username])
|
|
|
|
return (
|
|
<div className={'d-flex align-items-center h-100 w-100'}>
|
|
<div
|
|
className={`d-inline-flex align-items-bottom ${styles['user-line-color-indicator']} ${createCursorCssClass(
|
|
color
|
|
)}`}
|
|
/>
|
|
{avatar}
|
|
<div className={styles['active-indicator-container']}>
|
|
<ActiveIndicator active={active} />
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|