diff --git a/.changeset/afraid-mugs-priest.md b/.changeset/afraid-mugs-priest.md new file mode 100644 index 0000000000000..d4faa51b11da7 --- /dev/null +++ b/.changeset/afraid-mugs-priest.md @@ -0,0 +1,7 @@ +--- +"@rocket.chat/meteor": patch +"@rocket.chat/core-typings": patch +"@rocket.chat/livechat": patch +--- + +Fixes issue causing the setDepartment Livechat API overriding some triggers conditions diff --git a/packages/livechat/src/lib/hooks.ts b/packages/livechat/src/lib/hooks.ts index 79cb3129dd66a..7e3e56625761a 100644 --- a/packages/livechat/src/lib/hooks.ts +++ b/packages/livechat/src/lib/hooks.ts @@ -49,6 +49,18 @@ const updateIframeGuestData = (data: Partial) => { export type HooksWidgetAPI = typeof api; +const updateIframeData = (data: Partial) => { + const { iframe } = store.state; + + if (data.guest) { + throw new Error('Guest data changes not allowed. Use updateIframeGuestData instead.'); + } + + const iframeData = { ...iframe, ...data }; + + store.setState({ iframe: { ...iframeData } }); +}; + const api = { pageVisited(info: { change: string; title: string; location: { href: string } }) { const { token, room } = store.state; @@ -90,6 +102,11 @@ const api = { defaultAgent, } = store.state; + if (!user) { + updateIframeData({ defaultDepartment: value }); + return; + } + const { department: existingDepartment } = user || {}; const department = departments.find((dep) => dep._id === value || dep.name === value)?._id || ''; diff --git a/packages/livechat/src/routes/Register/index.tsx b/packages/livechat/src/routes/Register/index.tsx index c752281e7372b..2d88c7e1e5ff7 100644 --- a/packages/livechat/src/routes/Register/index.tsx +++ b/packages/livechat/src/routes/Register/index.tsx @@ -44,7 +44,9 @@ export const Register: FunctionalComponent<{ path: string }> = () => { theme: { title }, customFields = [], }, - iframe: { guest: { department: guestDepartment = undefined, name: guestName = undefined, email: guestEmail = undefined } = {} }, + + iframe: { defaultDepartment, guest: { name: guestName = undefined, email: guestEmail = undefined } = {} }, + loading = false, token, dispatch, @@ -96,8 +98,9 @@ export const Register: FunctionalComponent<{ path: string }> = () => { }; const getDepartmentDefault = () => { - if (departments.some((dept) => dept._id === guestDepartment)) { - return guestDepartment; + const dept = departments.find((dept) => dept._id === defaultDepartment || dept.name === defaultDepartment); + if (dept?._id) { + return dept._id; } }; diff --git a/packages/livechat/src/store/index.tsx b/packages/livechat/src/store/index.tsx index 06a8f05c4d060..4725a435aad56 100644 --- a/packages/livechat/src/store/index.tsx +++ b/packages/livechat/src/store/index.tsx @@ -72,6 +72,7 @@ export type StoreState = { visible?: boolean; department?: string; language?: string; + defaultDepartment?: string; }; gdpr: { accepted: boolean;