import React, { MouseEventHandler, useState } from 'react'; import { Box, config, Line, Menu, MenuItem, PopOut, RectCords, Text } from 'folds'; import { Icon, Icons } from '../../../components/icons'; import FocusTrap from 'focus-trap-react'; import { useNavigateWithTransition } from '../../../hooks/useViewTransitions'; import { SidebarItem, SidebarAvatar } from '../../../components/sidebar'; import { UserAvatar } from '../../../components/user-avatar'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { getMxIdLocalPart, mxcUrlToHttp } from '../../../utils/matrix'; import { nameInitials } from '../../../utils/common'; import { useMediaAuthentication } from '../../../hooks/useMediaAuthentication'; import { Settings } from '../../../features/settings'; import { useUserProfile } from '../../../hooks/useUserProfile'; import { useOtherUserCollectibles } from '../../../hooks/useUserCollectibles'; import { useSetting } from '../../../state/hooks/settings'; import { settingsAtom } from '../../../state/settings'; import { pickAvatarDecorationUrl, pickNameplateUrl } from '../../../utils/collectibleAssets'; import * as avatarDecorationCss from '../../../styles/AvatarDecoration.css'; import * as sidebarCss from '../../../components/sidebar/Sidebar.css'; import { Modal500 } from '../../../components/Modal500'; import { AccountSwitcher } from '../../../components/account-switcher'; import { stopPropagation } from '../../../utils/keyboard'; import { PluginButtonSlot } from '../../../features/settings/plugins/PluginButtonSlot'; import { getLoginPath } from '../../pathUtils'; import { logoutClient } from '../../../../client/initMatrix'; import { CustomStatusDialog } from '../../../components/custom-status'; export function SettingsTab() { const mx = useMatrixClient(); const useAuthentication = useMediaAuthentication(); const userId = mx.getUserId(); const profile = useUserProfile(userId ?? ''); const navigate = useNavigateWithTransition(); const [settings, setSettings] = useState(false); const [menuAnchor, setMenuAnchor] = useState(); const [customStatusOpen, setCustomStatusOpen] = useState(false); const displayName = profile.displayName ?? getMxIdLocalPart(userId ?? '') ?? userId ?? ''; const avatarUrl = profile.avatarUrl && userId ? mxcUrlToHttp(mx, profile.avatarUrl, useAuthentication, 96, 96, 'crop') ?? undefined : undefined; const { assetUrls } = useOtherUserCollectibles(userId ?? ''); const avatarDecorationUrl = pickAvatarDecorationUrl(assetUrls); const nameplateUrl = pickNameplateUrl(assetUrls); const [sidebarNameplateOpacity] = useSetting(settingsAtom, 'sidebarNameplateOpacity'); const nameplateIsVideo = Boolean( assetUrls['nameplate:animated'] || assetUrls['nameplate:asset.webm'] ); const openSettings = () => setSettings(true); const closeSettings = () => setSettings(false); const handleContextMenu: MouseEventHandler = (evt) => { evt.preventDefault(); const cords = evt.currentTarget.getBoundingClientRect(); setMenuAnchor(cords); }; return (
{sidebarNameplateOpacity > 0 && nameplateUrl && (nameplateIsVideo ? (
setMenuAnchor(undefined), clickOutsideDeactivates: true, isKeyForward: (evt: KeyboardEvent) => evt.key === 'ArrowDown', isKeyBackward: (evt: KeyboardEvent) => evt.key === 'ArrowUp', escapeDeactivates: stopPropagation, }} > { setMenuAnchor(undefined); navigate(`${getLoginPath()}?add-account=true`); }} size="300" radii="300" > Add Account { setMenuAnchor(undefined); logoutClient(mx); }} size="300" radii="300" variant="Critical" fill="None" > Logout { setMenuAnchor(undefined); setCustomStatusOpen(true); }} size="300" radii="300" > Set Custom Status } /> setCustomStatusOpen(false)} /> {settings && ( )}
); }