fix: Newly added agent not following business hours (#29529)
Co-authored-by: Kevin Aleman <11577696+KevLehman@users.noreply.github.com>pull/29567/head^2
parent
2bdddc5615
commit
c31f93ed96
@ -0,0 +1,6 @@ |
||||
--- |
||||
"@rocket.chat/meteor": patch |
||||
"@rocket.chat/model-typings": patch |
||||
--- |
||||
|
||||
fix: newly added agent not following business hours |
||||
@ -1,23 +1,51 @@ |
||||
import type { IUser } from '@rocket.chat/core-typings'; |
||||
import { Users } from '@rocket.chat/models'; |
||||
import type { UsersUpdateParamsPOST } from '@rocket.chat/rest-typings'; |
||||
|
||||
import { callbacks } from '../../../../lib/callbacks'; |
||||
import { Livechat } from '../lib/Livechat'; |
||||
import { callbackLogger } from '../lib/logger'; |
||||
|
||||
type UserData = UsersUpdateParamsPOST['data'] & { _id: string }; |
||||
type IAfterSaveUserProps = { |
||||
user: IUser; |
||||
oldUser: IUser | null; |
||||
}; |
||||
|
||||
const wasAgent = (user: Pick<IUser, 'roles'> | null) => user?.roles?.includes('livechat-agent'); |
||||
const isAgent = (user: Pick<IUser, 'roles'> | null) => user?.roles?.includes('livechat-agent'); |
||||
|
||||
const handleAgentUpdated = async (userData: IAfterSaveUserProps) => { |
||||
const { |
||||
user: { _id: userId, username }, |
||||
user: newUser, |
||||
oldUser, |
||||
} = userData; |
||||
|
||||
if (wasAgent(oldUser) && !isAgent(newUser)) { |
||||
callbackLogger.debug('Removing agent', userId); |
||||
await Livechat.removeAgent(username); |
||||
} |
||||
|
||||
const handleAgentUpdated = async (userData: UserData) => { |
||||
if (!userData?.roles?.includes('livechat-agent')) { |
||||
await Users.unsetExtension(userData._id); |
||||
if (!wasAgent(oldUser) && isAgent(newUser)) { |
||||
callbackLogger.debug('Adding agent', userId); |
||||
await Livechat.addAgent(username); |
||||
} |
||||
}; |
||||
|
||||
const handleDeactivateUser = async (userData: IUser) => { |
||||
if (userData?.roles?.includes('livechat-agent')) { |
||||
await Users.unsetExtension(userData._id); |
||||
const handleDeactivateUser = async (user: IUser) => { |
||||
if (wasAgent(user)) { |
||||
callbackLogger.debug('Removing agent', user._id); |
||||
await Livechat.removeAgent(user.username); |
||||
} |
||||
}; |
||||
|
||||
callbacks.add('afterSaveUser', handleAgentUpdated, callbacks.priority.LOW, 'livechat-after-save-user-remove-extension'); |
||||
const handleActivateUser = async (user: IUser) => { |
||||
if (isAgent(user)) { |
||||
callbackLogger.debug('Adding agent', user._id); |
||||
await Livechat.addAgent(user.username); |
||||
} |
||||
}; |
||||
|
||||
callbacks.add('afterSaveUser', handleAgentUpdated, callbacks.priority.LOW, 'livechat-after-save-user-update-agent'); |
||||
|
||||
callbacks.add('afterDeactivateUser', handleDeactivateUser, callbacks.priority.LOW, 'livechat-after-deactivate-user-remove-agent'); |
||||
|
||||
callbacks.add('afterDeactivateUser', handleDeactivateUser, callbacks.priority.LOW, 'livechat-after-deactivate-user-remove-extension'); |
||||
callbacks.add('afterActivateUser', handleActivateUser, callbacks.priority.LOW, 'livechat-after-activate-user-add-agent'); |
||||
|
||||
@ -1,3 +1,4 @@ |
||||
import { Logger } from '../../../../server/lib/logger/Logger'; |
||||
|
||||
export const callbackLogger = new Logger('[Omnichannel] Callback'); |
||||
export const businessHourLogger = new Logger('Business Hour'); |
||||
Loading…
Reference in new issue