diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index e9c7113c32..52606b11b5 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -16,21 +16,29 @@ define('chat', [ module.center(chatModal); module.focusInput(chatModal); } - - if (module.modalExists(roomId)) { - loadAndCenter(module.getModal(roomId)); - } else { - api.get(`/chats/${roomId}`, { - uid: uid || app.user.uid, - }).then((roomData) => { - roomData.users = roomData.users.filter(function (user) { - return user && parseInt(user.uid, 10) !== parseInt(app.user.uid, 10); - }); - roomData.uid = uid || app.user.uid; - roomData.isSelf = true; - module.createModal(roomData, loadAndCenter); - }).catch(alerts.error); - } + hooks.fire('filter:chat.openChat', { + modal: true, + roomId: roomId, + uid: uid, + }).then((hookData) => { + if (!hookData.modal) { + return ajaxify.go(`/chats/${roomId}`); + } + if (module.modalExists(roomId)) { + loadAndCenter(module.getModal(roomId)); + } else { + api.get(`/chats/${roomId}`, { + uid: uid || app.user.uid, + }).then((roomData) => { + roomData.users = roomData.users.filter(function (user) { + return user && parseInt(user.uid, 10) !== parseInt(app.user.uid, 10); + }); + roomData.uid = uid || app.user.uid; + roomData.isSelf = true; + module.createModal(roomData, loadAndCenter); + }).catch(alerts.error); + } + }); }; module.newChat = function (touid, callback) { @@ -122,24 +130,12 @@ define('chat', [ }); }; - module.onChatMessageReceived = function (data) { - const isSelf = data.self === 1; data.message.self = data.self; newMessage = data.self === 0; if (module.modalExists(data.roomId)) { addMessageToModal(data); - } else if (!ajaxify.data.template.chats) { - api.get(`/chats/${data.roomId}`, {}).then((roomData) => { - roomData.users = roomData.users.filter(function (user) { - return user && parseInt(user.uid, 10) !== parseInt(app.user.uid, 10); - }); - roomData.silent = true; - roomData.uid = app.user.uid; - roomData.isSelf = isSelf; - module.createModal(roomData); - }).catch(alerts.error); } }; diff --git a/src/controllers/accounts/chats.js b/src/controllers/accounts/chats.js index 02c9b404cc..c50f948ebe 100644 --- a/src/controllers/accounts/chats.js +++ b/src/controllers/accounts/chats.js @@ -27,6 +27,9 @@ chatsController.get = async function (req, res, next) { } if (!req.params.roomid) { + if (recentChats.rooms.length && recentChats.rooms[0]) { + return helpers.redirect(res, `/user/${req.params.userslug}/chats/${recentChats.rooms[0].roomId}`); + } return res.render('chats', { rooms: recentChats.rooms, uid: uid,