import React from 'react'; import PropTypes from 'prop-types'; import './DrawerHeader.scss'; import { twemojify } from '../../../util/twemojify'; import initMatrix from '../../../client/initMatrix'; import cons from '../../../client/state/cons'; import { openPublicRooms, openCreateRoom, openSpaceManage, openSpaceAddExisting, openInviteUser, openReusableContextMenu, } from '../../../client/action/navigation'; import { getEventCords } from '../../../util/common'; import { blurOnBubbling } from '../../atoms/button/script'; import Text from '../../atoms/text/Text'; import RawIcon from '../../atoms/system-icons/RawIcon'; import Header, { TitleWrapper } from '../../atoms/header/Header'; import IconButton from '../../atoms/button/IconButton'; import { MenuItem, MenuHeader } from '../../atoms/context-menu/ContextMenu'; import SpaceOptions from '../../molecules/space-options/SpaceOptions'; import PlusIC from '../../../../public/res/ic/outlined/plus.svg'; import HashPlusIC from '../../../../public/res/ic/outlined/hash-plus.svg'; import HashGlobeIC from '../../../../public/res/ic/outlined/hash-globe.svg'; import HashSearchIC from '../../../../public/res/ic/outlined/hash-search.svg'; import SpacePlusIC from '../../../../public/res/ic/outlined/space-plus.svg'; import ChevronBottomIC from '../../../../public/res/ic/outlined/chevron-bottom.svg'; function HomeSpaceOptions({ spaceId, afterOptionSelect }) { const mx = initMatrix.matrixClient; const room = mx.getRoom(spaceId); const canManage = room ? room.currentState.maySendStateEvent('m.space.child', mx.getUserId()) : true; return ( <> Add rooms or spaces { afterOptionSelect(); openCreateRoom(true, spaceId); }} disabled={!canManage} > Create new space { afterOptionSelect(); openCreateRoom(false, spaceId); }} disabled={!canManage} > Create new room { !spaceId && ( { afterOptionSelect(); openPublicRooms(); }} > Join public room )} { spaceId && ( { afterOptionSelect(); openSpaceAddExisting(spaceId); }} disabled={!canManage} > Add existing )} { spaceId && ( { afterOptionSelect(); openSpaceManage(spaceId); }} iconSrc={HashSearchIC} > Manage rooms )} ); } HomeSpaceOptions.defaultProps = { spaceId: null, }; HomeSpaceOptions.propTypes = { spaceId: PropTypes.string, afterOptionSelect: PropTypes.func.isRequired, }; function DrawerHeader({ selectedTab, spaceId }) { const mx = initMatrix.matrixClient; const tabName = selectedTab !== cons.tabs.DIRECTS ? 'Home' : 'Direct messages'; const isDMTab = selectedTab === cons.tabs.DIRECTS; const room = mx.getRoom(spaceId); const spaceName = isDMTab ? null : (room?.name || null); const openSpaceOptions = (e) => { e.preventDefault(); openReusableContextMenu( 'bottom', getEventCords(e, '.header'), (closeMenu) => , ); }; const openHomeSpaceOptions = (e) => { e.preventDefault(); openReusableContextMenu( 'right', getEventCords(e, '.ic-btn'), (closeMenu) => , ); }; return (
{spaceName ? ( ) : ( {tabName} )} { isDMTab && openInviteUser()} tooltip="Start DM" src={PlusIC} size="small" /> } { !isDMTab && }
); } DrawerHeader.defaultProps = { spaceId: null, }; DrawerHeader.propTypes = { selectedTab: PropTypes.string.isRequired, spaceId: PropTypes.string, }; export default DrawerHeader;