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 { timelineVisibilityTooltipTranslationMap } from "../data/timeline"; import { useAvatar } from "../data/user"; import { TimelineCardComponentProps } from "../timeline/TimelinePageTemplateUI"; import BlobImage from "../common/BlobImage"; export type PersonalTimelineManageItem = "avatar" | "nickname"; export type UserInfoCardProps = TimelineCardComponentProps< PersonalTimelineManageItem >; const UserInfoCard: React.FC = (props) => { const { onHeight, onManage } = props; const { t } = useTranslation(); const avatar = useAvatar(props.timeline.owner.username); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 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), [] ); return (
{props.timeline.owner.nickname} @{props.timeline.owner.username}

{props.timeline.description}

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