revite/src/components/common/UserHeader.tsx

86 lines
2.3 KiB
TypeScript
Raw Normal View History

2021-06-19 15:24:11 -04:00
import Tooltip from "./Tooltip";
2021-06-19 10:29:04 -04:00
import { User } from "revolt.js";
import Header from "../ui/Header";
import UserIcon from "./UserIcon";
2021-06-19 15:24:11 -04:00
import { Text } from "preact-i18n";
2021-06-19 10:29:04 -04:00
import UserStatus from './UserStatus';
import styled from "styled-components";
import { Localizer } from 'preact-i18n';
2021-06-19 15:24:11 -04:00
import { Link } from "react-router-dom";
import IconButton from "../ui/IconButton";
2021-06-19 10:29:04 -04:00
import { Settings } from "@styled-icons/feather";
2021-06-19 15:24:11 -04:00
import { openContextMenu } from "preact-context-menu";
2021-06-19 10:29:04 -04:00
import { isTouchscreenDevice } from "../../lib/isTouchscreenDevice";
2021-06-19 15:24:11 -04:00
import { useIntermediate } from "../../context/intermediate/Intermediate";
2021-06-19 10:29:04 -04:00
const HeaderBase = styled.div`
gap: 0;
flex-grow: 1;
min-width: 0;
display: flex;
flex-direction: column;
* {
min-width: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.username {
cursor: pointer;
font-size: 16px;
font-weight: 600;
}
.status {
cursor: pointer;
font-size: 12px;
margin-top: -2px;
}
`;
interface Props {
user: User
}
export default function UserHeader({ user }: Props) {
2021-06-19 15:24:11 -04:00
const { writeClipboard } = useIntermediate();
2021-06-19 10:29:04 -04:00
2021-06-19 15:24:11 -04:00
function openPresenceSelector() {
openContextMenu("Status");
2021-06-19 10:29:04 -04:00
}
return (
<Header placement="secondary">
<UserIcon
target={user}
size={32}
status
onClick={openPresenceSelector}
/>
<HeaderBase>
<Localizer>
2021-06-19 15:24:11 -04:00
<Tooltip content={<Text id="app.special.copy_username" />}>
2021-06-19 10:29:04 -04:00
<span className="username"
onClick={() => writeClipboard(user.username)}>
@{user.username}
</span>
2021-06-19 15:24:11 -04:00
</Tooltip>
2021-06-19 10:29:04 -04:00
</Localizer>
<span className="status"
onClick={openPresenceSelector}>
<UserStatus user={user} />
</span>
</HeaderBase>
{ !isTouchscreenDevice && <div className="actions">
2021-06-19 15:24:11 -04:00
<Link to="/settings">
<IconButton>
<Settings size={24} />
</IconButton>
</Link>
2021-06-19 10:29:04 -04:00
</div> }
</Header>
)
}