feat: Add chatwoot:ready event listener on window (#1091)
* feat: Add `chatwoot:ready` event listener on window * Add specs * Rename customEventHelper.js -> CustomEventHelper.js
This commit is contained in:
@@ -13,6 +13,9 @@ import {
|
|||||||
onClickChatBubble,
|
onClickChatBubble,
|
||||||
onBubbleClick,
|
onBubbleClick,
|
||||||
} from './bubbleHelpers';
|
} from './bubbleHelpers';
|
||||||
|
import { dispatchWindowEvent } from 'shared/helpers/CustomEventHelper';
|
||||||
|
|
||||||
|
const EVENT_NAME = 'chatwoot:ready';
|
||||||
|
|
||||||
export const IFrameHelper = {
|
export const IFrameHelper = {
|
||||||
getUrl({ baseUrl, websiteToken }) {
|
getUrl({ baseUrl, websiteToken }) {
|
||||||
@@ -89,6 +92,7 @@ export const IFrameHelper = {
|
|||||||
loaded: message => {
|
loaded: message => {
|
||||||
Cookies.set('cw_conversation', message.config.authToken, {
|
Cookies.set('cw_conversation', message.config.authToken, {
|
||||||
expires: 365,
|
expires: 365,
|
||||||
|
sameSite: 'Lax',
|
||||||
});
|
});
|
||||||
window.$chatwoot.hasLoaded = true;
|
window.$chatwoot.hasLoaded = true;
|
||||||
IFrameHelper.sendMessage('config-set', {
|
IFrameHelper.sendMessage('config-set', {
|
||||||
@@ -103,6 +107,7 @@ export const IFrameHelper = {
|
|||||||
if (window.$chatwoot.user) {
|
if (window.$chatwoot.user) {
|
||||||
IFrameHelper.sendMessage('set-user', window.$chatwoot.user);
|
IFrameHelper.sendMessage('set-user', window.$chatwoot.user);
|
||||||
}
|
}
|
||||||
|
dispatchWindowEvent(EVENT_NAME);
|
||||||
},
|
},
|
||||||
|
|
||||||
toggleBubble: () => {
|
toggleBubble: () => {
|
||||||
|
|||||||
15
app/javascript/shared/helpers/CustomEventHelper.js
Normal file
15
app/javascript/shared/helpers/CustomEventHelper.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export const createEvent = eventName => {
|
||||||
|
let event;
|
||||||
|
if (typeof window.CustomEvent === 'function') {
|
||||||
|
event = new CustomEvent(eventName);
|
||||||
|
} else {
|
||||||
|
event = document.createEvent('CustomEvent');
|
||||||
|
event.initCustomEvent(eventName, false, false, null);
|
||||||
|
}
|
||||||
|
return event;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const dispatchWindowEvent = eventName => {
|
||||||
|
const event = createEvent(eventName);
|
||||||
|
window.dispatchEvent(event);
|
||||||
|
};
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { dispatchWindowEvent } from '../CustomEventHelper';
|
||||||
|
|
||||||
|
describe('dispatchWindowEvent', () => {
|
||||||
|
it('dispatches correct event', () => {
|
||||||
|
window.dispatchEvent = jest.fn();
|
||||||
|
dispatchWindowEvent('chatwoot:ready');
|
||||||
|
expect(dispatchEvent).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -20,4 +20,8 @@ window.chatwootSettings = {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})(document,"script");
|
})(document,"script");
|
||||||
|
|
||||||
|
window.addEventListener('chatwoot:ready', function() {
|
||||||
|
console.log(window.$chatwoot)
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -8,6 +8,15 @@ Additional information about a contact is always useful, Chatwoot website SDK en
|
|||||||
|
|
||||||
If you have installed our code on your website, SDK would expose `window.$chatwoot` object.
|
If you have installed our code on your website, SDK would expose `window.$chatwoot` object.
|
||||||
|
|
||||||
|
Inorder to make sure that the SDK has been loaded completely, please make sure that you listen to `chatwoot:ready` event as follows
|
||||||
|
|
||||||
|
```js
|
||||||
|
window.addEventListener('chatwoot:ready', function() {
|
||||||
|
// Use window.$chatwoot here
|
||||||
|
// ...
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
To hide the bubble, you can use the following setting. Please not if you use this, then you have to trigger the widget by yourself.
|
To hide the bubble, you can use the following setting. Please not if you use this, then you have to trigger the widget by yourself.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
|
|||||||
Reference in New Issue
Block a user