import initMatrix from '../../../client/initMatrix';
import { doesRoomHaveUnread } from '../../../util/matrixUtil';
import navigation from '../../../client/state/navigation';
+import { openRoomOptions } from '../../../client/action/navigation';
import { createSpaceShortcut, deleteSpaceShortcut } from '../../../client/action/room';
+import { getEventCords } from '../../../util/common';
import IconButton from '../../atoms/button/IconButton';
import RoomSelector from '../../molecules/room-selector/RoomSelector';
import SpaceLockIC from '../../../../public/res/ic/outlined/space-lock.svg';
import StarIC from '../../../../public/res/ic/outlined/star.svg';
import FilledStarIC from '../../../../public/res/ic/filled/star.svg';
+import VerticalMenuIC from '../../../../public/res/ic/outlined/vertical-menu.svg';
function Selector({
roomId, isDM, drawerPostie, onClick,
};
}, []);
+ if (room.isSpaceRoom()) {
+ return (
+ <RoomSelector
+ key={roomId}
+ name={room.name}
+ roomId={roomId}
+ iconSrc={room.getJoinRule() === 'invite' ? SpaceLockIC : SpaceIC}
+ isUnread={doesRoomHaveUnread(room)}
+ notificationCount={room.getUnreadNotificationCount('total') || 0}
+ isAlert={room.getUnreadNotificationCount('highlight') !== 0}
+ onClick={onClick}
+ options={(
+ <IconButton
+ size="extra-small"
+ variant={initMatrix.roomList.spaceShortcut.has(roomId) ? 'positive' : 'surface'}
+ tooltip={initMatrix.roomList.spaceShortcut.has(roomId) ? 'Remove favourite' : 'Favourite'}
+ tooltipPlacement="right"
+ src={initMatrix.roomList.spaceShortcut.has(roomId) ? FilledStarIC : StarIC}
+ onClick={() => {
+ if (initMatrix.roomList.spaceShortcut.has(roomId)) deleteSpaceShortcut(roomId);
+ else createSpaceShortcut(roomId);
+ forceUpdate({});
+ }}
+ />
+ )}
+ />
+ );
+ }
+
return (
<RoomSelector
key={roomId}
name={room.name}
roomId={roomId}
imageSrc={isDM ? imageSrc : null}
- iconSrc={
- isDM
- ? null
- : (() => {
- if (room.isSpaceRoom()) {
- return (room.getJoinRule() === 'invite' ? SpaceLockIC : SpaceIC);
- }
- return (room.getJoinRule() === 'invite' ? HashLockIC : HashIC);
- })()
- }
+ // eslint-disable-next-line no-nested-ternary
+ iconSrc={isDM ? null : room.getJoinRule() === 'invite' ? HashLockIC : HashIC}
isSelected={isSelected}
isUnread={doesRoomHaveUnread(room)}
notificationCount={room.getUnreadNotificationCount('total') || 0}
isAlert={room.getUnreadNotificationCount('highlight') !== 0}
onClick={onClick}
options={(
- !room.isSpaceRoom()
- ? null
- : (
- <IconButton
- size="extra-small"
- variant={initMatrix.roomList.spaceShortcut.has(roomId) ? 'positive' : 'surface'}
- tooltip={initMatrix.roomList.spaceShortcut.has(roomId) ? 'Remove favourite' : 'Favourite'}
- src={initMatrix.roomList.spaceShortcut.has(roomId) ? FilledStarIC : StarIC}
- onClick={() => {
- if (initMatrix.roomList.spaceShortcut.has(roomId)) deleteSpaceShortcut(roomId);
- else createSpaceShortcut(roomId);
- forceUpdate({});
- }}
- />
- )
+ <IconButton
+ size="extra-small"
+ tooltip="Options"
+ tooltipPlacement="right"
+ src={VerticalMenuIC}
+ onClick={(e) => openRoomOptions(getEventCords(e), roomId)}
+ />
)}
/>
);
import { redactEvent, sendReaction } from '../../../client/action/roomTimeline';
import { getUsername, getUsernameOfRoomMember, doesRoomHaveUnread } from '../../../util/matrixUtil';
import colorMXID from '../../../util/colorMXID';
-import { diffMinutes, isNotInSameDay } from '../../../util/common';
+import { diffMinutes, isNotInSameDay, getEventCords } from '../../../util/common';
import { openEmojiBoard, openReadReceipts } from '../../../client/action/navigation';
import Divider from '../../atoms/divider/Divider';
}
function pickEmoji(e, roomId, eventId, roomTimeline) {
- const boxInfo = e.target.getBoundingClientRect();
- openEmojiBoard({
- x: boxInfo.x,
- y: boxInfo.y,
- detail: e.detail,
- }, (emoji) => {
+ openEmojiBoard(getEventCords(e), (emoji) => {
toggleEmoji(roomId, eventId, emoji.unicode, roomTimeline);
e.target.click();
});
import PropTypes from 'prop-types';
import initMatrix from '../../../client/initMatrix';
-import { togglePeopleDrawer, openInviteUser } from '../../../client/action/navigation';
-import * as roomActions from '../../../client/action/room';
+import { togglePeopleDrawer, openRoomOptions } from '../../../client/action/navigation';
import colorMXID from '../../../util/colorMXID';
+import { getEventCords } from '../../../util/common';
import Text from '../../atoms/text/Text';
import IconButton from '../../atoms/button/IconButton';
import Header, { TitleWrapper } from '../../atoms/header/Header';
import Avatar from '../../atoms/avatar/Avatar';
-import ContextMenu, { MenuItem, MenuHeader } from '../../atoms/context-menu/ContextMenu';
import UserIC from '../../../../public/res/ic/outlined/user.svg';
import VerticalMenuIC from '../../../../public/res/ic/outlined/vertical-menu.svg';
-import LeaveArrowIC from '../../../../public/res/ic/outlined/leave-arrow.svg';
-import AddUserIC from '../../../../public/res/ic/outlined/add-user.svg';
function RoomViewHeader({ roomId }) {
const mx = initMatrix.matrixClient;
{ typeof roomTopic !== 'undefined' && <p title={roomTopic} className="text text-b3">{roomTopic}</p>}
</TitleWrapper>
<IconButton onClick={togglePeopleDrawer} tooltip="People" src={UserIC} />
- <ContextMenu
- placement="bottom"
- content={(toogleMenu) => (
- <>
- <MenuHeader>Options</MenuHeader>
- {/* <MenuBorder /> */}
- <MenuItem
- iconSrc={AddUserIC}
- onClick={() => {
- openInviteUser(roomId); toogleMenu();
- }}
- >
- Invite
- </MenuItem>
- <MenuItem iconSrc={LeaveArrowIC} variant="danger" onClick={() => roomActions.leave(roomId)}>Leave</MenuItem>
- </>
- )}
- render={(toggleMenu) => <IconButton onClick={toggleMenu} tooltip="Options" src={VerticalMenuIC} />}
+ <IconButton
+ onClick={(e) => openRoomOptions(getEventCords(e), roomId)}
+ tooltip="Options"
+ src={VerticalMenuIC}
/>
</Header>
);
import cons from '../../../client/state/cons';
import settings from '../../../client/state/settings';
import { openEmojiBoard } from '../../../client/action/navigation';
-import { bytesToSize } from '../../../util/common';
+import { bytesToSize, getEventCords } from '../../../util/common';
import { getUsername } from '../../../util/matrixUtil';
import colorMXID from '../../../util/colorMXID';
<div ref={rightOptionsRef} className="room-input__option-container">
<IconButton
onClick={(e) => {
- const boxInfo = e.target.getBoundingClientRect();
- openEmojiBoard({
- x: boxInfo.x + (document.dir === 'rtl' ? -80 : 80),
- y: boxInfo.y - 250,
- detail: e.detail,
- }, addEmoji);
+ const cords = getEventCords(e);
+ cords.x += (document.dir === 'rtl' ? -80 : 80);
+ cords.y -= 250;
+ openEmojiBoard(cords, addEmoji);
}}
tooltip="Emoji"
src={EmojiIC}
import Windows from '../../organisms/pw/Windows';
import Dialogs from '../../organisms/pw/Dialogs';
import EmojiBoardOpener from '../../organisms/emoji-board/EmojiBoardOpener';
+import RoomOptions from '../../organisms/room-optons/RoomOptions';
import initMatrix from '../../../client/initMatrix';
<Windows />
<Dialogs />
<EmojiBoardOpener />
+ <RoomOptions />
</div>
);
}