fix: setDepartment Livechat API call overriding triggers (#31663)

pull/31961/head^2
Martin Schoeler 2 years ago committed by GitHub
parent fe1f6cea88
commit b9ef630816
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 7
      .changeset/afraid-mugs-priest.md
  2. 17
      packages/livechat/src/lib/hooks.ts
  3. 9
      packages/livechat/src/routes/Register/index.tsx
  4. 1
      packages/livechat/src/store/index.tsx

@ -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

@ -49,6 +49,18 @@ const updateIframeGuestData = (data: Partial<StoreState['guest']>) => {
export type HooksWidgetAPI = typeof api;
const updateIframeData = (data: Partial<StoreState['iframe']>) => {
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 || '';

@ -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;
}
};

@ -72,6 +72,7 @@ export type StoreState = {
visible?: boolean;
department?: string;
language?: string;
defaultDepartment?: string;
};
gdpr: {
accepted: boolean;

Loading…
Cancel
Save