Skip to content

Commit

Permalink
refactor(core): some core changes to sockets
Browse files Browse the repository at this point in the history
  • Loading branch information
polonel committed Jul 11, 2022
1 parent e614ed6 commit 768ecd6
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 50 deletions.
8 changes: 6 additions & 2 deletions src/client/components/PDropdown/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class PDropDown extends React.Component {
}
}

closeOnClick (e) {
closeOnClick () {
if (this.dropRef.current) {
document.removeEventListener('mouseup', this.hideDropdownOnMouseUp)
this.dropRef.current.classList.remove('pDropOpen')
Expand Down Expand Up @@ -120,6 +120,8 @@ class PDropDown extends React.Component {
ref.style.left = left
ref.style.top = top
ref.classList.add('pDropOpen')

this.props.onShow()
}
}
}
Expand Down Expand Up @@ -194,6 +196,7 @@ PDropDown.propTypes = {
minWidth: PropTypes.number,
isListItems: PropTypes.bool,
className: PropTypes.string,
onShow: PropTypes.func.isRequired,
children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired
}

Expand All @@ -205,7 +208,8 @@ PDropDown.defaultProps = {
topOffset: '0',
leftOffset: '0',
minHeight: 0,
isListItems: true
isListItems: true,
onShow: () => {}
}

export default PDropDown
16 changes: 10 additions & 6 deletions src/client/containers/Topbar/conversationsDropdown.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { observer } from 'mobx-react'
import { makeObservable, observable } from 'mobx'
import moment from 'moment-timezone'

import { MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS } from 'serverSocket/socketEventConsts'
import PDropDown from 'components/PDropdown'

import helpers from 'lib/helpers'
Expand All @@ -35,18 +36,18 @@ class ConversationsDropdownPartial extends React.Component {
}

componentDidMount () {
this.props.socket.on('updateConversationsNotifications', this.onUpdateConversationsNotifications)
this.props.socket.on(MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS, this.onUpdateConversationsNotifications)
}

componentWillUnmount () {
this.props.socket.off('updateConversationsNotifications', this.onUpdateConversationsNotifications)
this.props.socket.off(MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS, this.onUpdateConversationsNotifications)
}

onUpdateConversationsNotifications (data) {
if (!helpers.arrayIsEqual(this.conversations, data.conversations)) this.conversations = data.conversations
}

static onConversationClicked (e, id) {
onConversationClicked (e, id) {
e.preventDefault()

History.pushState(null, null, `/messages/${id}`)
Expand All @@ -61,8 +62,11 @@ class ConversationsDropdownPartial extends React.Component {
id={'conversations'}
title={'Conversations'}
titleHref={'/messages'}
topOffset={'-10'}
leftOffset={'4'}
topOffset={-4}
leftOffset={4}
onShow={() => {
this.props.socket.emit(MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS)
}}
rightComponent={
<a href={'/messages/startconversation'} className={'hoverUnderline'}>
Start Conversation
Expand All @@ -85,7 +89,7 @@ class ConversationsDropdownPartial extends React.Component {
<li key={conversation._id}>
<a
className='no-ajaxy messageNotification uk-position-relative'
onClick={e => ConversationsDropdownPartial.onConversationClicked(e, conversation._id)}
onClick={e => this.onConversationClicked(e, conversation._id)}
>
<div className='uk-clearfix'>
<div className='profilePic uk-float-left'>
Expand Down
86 changes: 44 additions & 42 deletions src/socketio/chatSocket.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@
* Updated: 1/20/19 4:43 PM
* Copyright (c) 2014-2019. All rights reserved.
*/
var _ = require('lodash')
var async = require('async')
var winston = require('../logger')
var utils = require('../helpers/utils')
var userSchema = require('../models/user')

var sharedVars = require('./index').shared
var sharedUtils = require('./index').utils
const _ = require('lodash')
const async = require('async')
const winston = require('../logger')
const utils = require('../helpers/utils')
const userSchema = require('../models/user')

const sharedVars = require('./index').shared
const sharedUtils = require('./index').utils
const socketEventConst = require('./socketEventConsts')

var events = {}
const events = {}

function register (socket) {
events.onSetUserOnlineStatus(socket)
Expand Down Expand Up @@ -87,30 +87,30 @@ events.onSetUserOnlineStatus = function (socket) {
}

function updateUsers () {
var sortedUserList = sharedUtils.sortByKeys(sharedVars.usersOnline)
const sortedUserList = sharedUtils.sortByKeys(sharedVars.usersOnline)
_.forEach(sortedUserList, function (v) {
var user = v.user
var sockets = v.sockets
const user = v.user
const sockets = v.sockets
if (user && sockets.length > 0) {
_.forEach(sockets, function (sock) {
var socket = _.find(sharedVars.sockets, function (s) {
const socket = _.find(sharedVars.sockets, function (s) {
return s.id === sock
})

if (socket) {
if (user.role.isAdmin || user.role.isAgent) {
socket.emit('updateUsers', sortedUserList)
} else {
var groupSchema = require('../models/group')
const groupSchema = require('../models/group')
groupSchema.getAllGroupsOfUser(user._id, function (err, groups) {
if (!err) {
var usersOfGroups = _.map(groups, function (g) {
let usersOfGroups = _.map(groups, function (g) {
return _.map(g.members, function (m) {
return { user: m }
})
})

var agentsAndAdmins = _.chain(sortedUserList)
const agentsAndAdmins = _.chain(sortedUserList)
.filter(function (u) {
return u.user.role.isAdmin || u.user.role.isAgent
})
Expand All @@ -121,19 +121,19 @@ function updateUsers () {

usersOfGroups = _.concat(usersOfGroups, agentsAndAdmins)

var onlineUsernames = _.map(sortedUserList, function (u) {
let onlineUsernames = _.map(sortedUserList, function (u) {
return u.user.username
})
onlineUsernames = _.flattenDeep(onlineUsernames)

var sortedUsernames = _.chain(usersOfGroups)
const sortedUsernames = _.chain(usersOfGroups)
.flattenDeep()
.map(function (u) {
return u.user.username
})
.value()

var actual = _.intersection(onlineUsernames, sortedUsernames)
const actual = _.intersection(onlineUsernames, sortedUsernames)

usersOfGroups = _.chain(usersOfGroups)
.flattenDeep()
Expand All @@ -145,11 +145,11 @@ function updateUsers () {
})
.value()

var sortedKeys = _.map(usersOfGroups, function (m) {
const sortedKeys = _.map(usersOfGroups, function (m) {
return m.user.username
})

var obj = _.zipObject(sortedKeys, usersOfGroups)
const obj = _.zipObject(sortedKeys, usersOfGroups)

socket.emit('updateUsers', obj)
}
Expand All @@ -175,8 +175,8 @@ function updateOnlineBubbles () {
)

utils.sendToAllConnectedClients(io, socketEventConst.UI_ONLINE_STATUS_UPDATE, {
sortedUserList: sortedUserList,
sortedIdleList: sortedIdleList
sortedUserList,
sortedIdleList
})
}

Expand All @@ -186,29 +186,31 @@ events.updateOnlineBubbles = function (socket) {
})
}

function updateConversationsNotifications () {
_.each(io.sockets.sockets, function (socket) {
async function updateConversationsNotifications () {
return // TODO: Disable until we can fix the performance hit on this eventloop.
const sockets = await io.fetchSockets()
sockets.forEach(function (socket) {
if (!socket.request && !socket.request.user) {
return
}

var userId = socket.request.user._id
var messageSchema = require('../models/chat/message')
var conversationSchema = require('../models/chat/conversation')
const userId = socket.request.user._id
const messageSchema = require('../models/chat/message')
const conversationSchema = require('../models/chat/conversation')
conversationSchema.getConversationsWithLimit(userId, 10, function (err, conversations) {
if (err) {
winston.warn(err.message)
return false
}

var convos = []
const convos = []

async.eachSeries(
conversations,
function (convo, done) {
var c = convo.toObject()
const c = convo.toObject()

var userMeta =
const userMeta =
convo.userMeta[
_.findIndex(convo.userMeta, function (item) {
return item.userId.toString() === userId.toString()
Expand All @@ -232,7 +234,7 @@ function updateConversationsNotifications () {
if (!_.isUndefined(rm)) {
if (!c.partner || !rm.owner) return done()

if (String(c.partner._id) === String(rm.owner._id)) {
if (c.partner._id.toString() === rm.owner._id.toString()) {
c.recentMessage = c.partner.fullname + ': ' + rm.body
} else {
c.recentMessage = 'You: ' + rm.body
Expand All @@ -248,7 +250,7 @@ function updateConversationsNotifications () {
},
function (err) {
if (err) return false
return utils.sendToSelf(socket, 'updateConversationsNotifications', {
return utils.sendToSelf(socket, socketEventConst.MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS, {
conversations: convos
})
}
Expand All @@ -258,20 +260,20 @@ function updateConversationsNotifications () {
}

events.updateConversationsNotifications = function (socket) {
socket.on('updateConversationsNotifications', function () {
socket.on(socketEventConst.MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS, function () {
updateConversationsNotifications(socket)
})
}

function spawnOpenChatWindows (socket) {
var loggedInAccountId = socket.request.user._id
var userSchema = require('../models/user')
var conversationSchema = require('../models/chat/conversation')
const loggedInAccountId = socket.request.user._id
const userSchema = require('../models/user')
const conversationSchema = require('../models/chat/conversation')
userSchema.getUser(loggedInAccountId, function (err, user) {
if (err) return true

async.eachSeries(user.preferences.openChatWindows, function (convoId, done) {
var partner = null
let partner = null
conversationSchema.getConversation(convoId, function (err, conversation) {
if (err || !conversation) return done()
_.each(conversation.participants, function (i) {
Expand Down Expand Up @@ -508,7 +510,7 @@ function joinChatServer (socket) {
if (user.username.length !== 0) {
sharedVars.usersOnline[user.username] = {
sockets: [socket.id],
user: user
user
}
// sortedUserList = sharedUtils.sortByKeys(sharedVars.usersOnline)

Expand Down Expand Up @@ -582,7 +584,7 @@ events.onDisconnect = function (socket) {
}

module.exports = {
events: events,
eventLoop: eventLoop,
register: register
events,
eventLoop,
register
}
1 change: 1 addition & 0 deletions src/socketio/socketEventConsts.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ exported.MESSAGES_SPAWN_CHAT_WINDOW = '$trudesk:messages:spawn_chat_window'
exported.MESSAGES_UI_SPAWN_CHAT_WINDOW = '$trudesk:messages:ui:spawn_chat_window'
exported.MESSAGES_SAVE_CHAT_WINDOW = '$trudesk:messages:save_chat_window'
exported.MESSAGES_SAVE_CHAT_WINDOW_COMPLETE = '$trudesk:messages:save_chat_window_complete'
exported.MESSAGES_UPDATE_UI_CONVERSATION_NOTIFICATIONS = '$trudesk:messages:ui:conversation_notifications:update'

// NOTICES
exported.NOTICE_SHOW = '$trudesk:notice:show'
Expand Down

0 comments on commit 768ecd6

Please sign in to comment.