import React from 'react'; import clsx from 'clsx'; import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem, Button, } from 'reactstrap'; import { useTranslation } from 'react-i18next'; import { fromEvent } from 'rxjs'; import { TimelineInfo, timelineVisibilityTooltipTranslationMap, } from '../data/timeline'; import { useAvatarVersion, useAvatarUrlWithGivenVersion } from './api'; import { useUser } from '../data/user'; import { TimelineCardComponentProps } from '../timeline/TimelinePageTemplateUI'; export type PersonalTimelineManageItem = 'avatar' | 'nickname'; export type UserInfoCardProps = TimelineCardComponentProps< TimelineInfo, PersonalTimelineManageItem >; const UserInfoCard: React.FC = (props) => { const { onHeight, onManage } = props; const { t } = useTranslation(); const user = useUser(); const avatarVersion = useAvatarVersion(); const avatarUrl = useAvatarUrlWithGivenVersion( user != null && user.username === props.timeline.owner.username ? avatarVersion : undefined, props.timeline.owner._links.avatar ); const containerRef = React.useRef(null!); const notifyHeight = React.useCallback((): void => { if (onHeight) { onHeight(containerRef.current.getBoundingClientRect().height); } }, [onHeight]); React.useEffect(() => { const subscription = fromEvent(window, 'resize').subscribe(notifyHeight); return () => subscription.unsubscribe(); }); const [manageDropdownOpen, setManageDropdownOpen] = React.useState( false ); const toggleManageDropdown = React.useCallback( (): void => setManageDropdownOpen((old) => !old), [] ); const onManageProperty = React.useCallback( (): void => onManage!('property'), [onManage] ); const onManageAvatar = React.useCallback((): void => onManage!('avatar'), [ onManage, ]); const onManageNickname = React.useCallback( (): void => onManage!('nickname'), [onManage] ); return (
{props.timeline.owner.nickname} @{props.timeline.owner.username}

{props.timeline.description}

{t(timelineVisibilityTooltipTranslationMap[props.timeline.visibility])}
{props.onManage != null ? ( {t('timeline.manage')} {t('timeline.manageItem.nickname')} {t('timeline.manageItem.avatar')} {t('timeline.manageItem.property')} {t('timeline.manageItem.member')} ) : ( )}
); }; export default UserInfoCard;