diff --git a/src/app/organisms/create-room/CreateRoom.jsx b/src/app/organisms/create-room/CreateRoom.jsx index 22ec87f..6c4968a 100644 --- a/src/app/organisms/create-room/CreateRoom.jsx +++ b/src/app/organisms/create-room/CreateRoom.jsx @@ -1,8 +1,9 @@ -import React, { useState, useRef } from 'react'; +import React, { useState, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import './CreateRoom.scss'; import initMatrix from '../../../client/initMatrix'; +import cons from '../../../client/state/cons'; import { isRoomAliasAvailable } from '../../../util/matrixUtil'; import * as roomActions from '../../../client/action/room'; import { selectRoom } from '../../../client/action/navigation'; @@ -51,6 +52,20 @@ function CreateRoom({ isOpen, onRequestClose }) { setRoleIndex(0); } + const onCreated = (roomId) => { + resetForm(); + selectRoom(roomId); + onRequestClose(); + }; + + useEffect(() => { + const { roomList } = initMatrix; + roomList.on(cons.events.roomList.ROOM_CREATED, onCreated); + return () => { + roomList.removeListener(cons.events.roomList.ROOM_CREATED, onCreated); + }; + }, []); + async function createRoom() { if (isCreatingRoom) return; updateIsCreatingRoom(true); @@ -67,13 +82,9 @@ function CreateRoom({ isOpen, onRequestClose }) { const powerLevel = roleIndex === 1 ? 101 : undefined; try { - const result = await roomActions.create({ + await roomActions.create({ name, topic, isPublic, roomAlias, isEncrypted, powerLevel, }); - - resetForm(); - selectRoom(result.room_id); - onRequestClose(); } catch (e) { if (e.message === 'M_UNKNOWN: Invalid characters in room alias') { updateCreatingError('ERROR: Invalid characters in room address'); @@ -82,8 +93,8 @@ function CreateRoom({ isOpen, onRequestClose }) { updateCreatingError('ERROR: Room address is already in use'); updateIsValidAddress(false); } else updateCreatingError(e.message); + updateIsCreatingRoom(false); } - updateIsCreatingRoom(false); } function validateAddress(e) { diff --git a/src/app/organisms/profile-viewer/ProfileViewer.jsx b/src/app/organisms/profile-viewer/ProfileViewer.jsx index b9fe448..41a43fc 100644 --- a/src/app/organisms/profile-viewer/ProfileViewer.jsx +++ b/src/app/organisms/profile-viewer/ProfileViewer.jsx @@ -97,8 +97,20 @@ function ProfileFooter({ roomId, userId, onRequestClose }) { const myPowerlevel = room.getMember(mx.getUserId()).powerLevel; const canIKick = room.currentState.hasSufficientPowerLevelFor('kick', myPowerlevel); + const onCreated = (dmRoomId) => { + if (isMountedRef.current === false) return; + setIsCreatingDM(false); + selectRoom(dmRoomId); + onRequestClose(); + }; + useEffect(() => () => { isMountedRef.current = false; + const { roomList } = initMatrix; + roomList.on(cons.events.roomList.ROOM_CREATED, onCreated); + return () => { + roomList.removeListener(cons.events.roomList.ROOM_CREATED, onCreated); + }; }, []); useEffect(() => { setIsUserIgnored(initMatrix.matrixClient.isUserIgnored(userId)); @@ -113,7 +125,7 @@ function ProfileFooter({ roomId, userId, onRequestClose }) { for (let i = 0; i < directIds.length; i += 1) { const dRoom = mx.getRoom(directIds[i]); const roomMembers = dRoom.getMembers(); - if (roomMembers.length <= 2 && dRoom.currentState.members[userId]) { + if (roomMembers.length <= 2 && dRoom.getMember(userId)) { selectRoom(directIds[i]); onRequestClose(); return; @@ -123,17 +135,13 @@ function ProfileFooter({ roomId, userId, onRequestClose }) { // Create new DM try { setIsCreatingDM(true); - const result = await roomActions.create({ + await roomActions.create({ isEncrypted: true, isDirect: true, invite: [userId], }); - - if (isMountedRef.current === false) return; - setIsCreatingDM(false); - selectRoom(result.room_id); - onRequestClose(); } catch { + if (isMountedRef.current === false) return; setIsCreatingDM(false); } } diff --git a/src/app/organisms/room-optons/RoomOptions.jsx b/src/app/organisms/room-optons/RoomOptions.jsx index 0c89008..dbacc54 100644 --- a/src/app/organisms/room-optons/RoomOptions.jsx +++ b/src/app/organisms/room-optons/RoomOptions.jsx @@ -147,8 +147,11 @@ function RoomOptions() { }, []); const handleInviteClick = () => openInviteUser(roomId); - const handleLeaveClick = () => { - if (confirm('Are you really want to leave this room?')) roomActions.leave(roomId); + const handleLeaveClick = (toggleMenu) => { + if (confirm('Are you really want to leave this room?')) { + roomActions.leave(roomId); + toggleMenu(); + } }; function setNotif(nState, currentNState) { @@ -172,7 +175,7 @@ function RoomOptions() { > Invite - Leave + handleLeaveClick(toggleMenu)}>Leave Notification