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:
Pranav Raj S
2020-07-25 21:54:58 +05:30
committed by GitHub
parent 80b083c7fc
commit 12ee7e5d82
5 changed files with 42 additions and 0 deletions

View File

@@ -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: () => {

View 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);
};

View File

@@ -0,0 +1,9 @@
import { dispatchWindowEvent } from '../CustomEventHelper';
describe('dispatchWindowEvent', () => {
it('dispatches correct event', () => {
window.dispatchEvent = jest.fn();
dispatchWindowEvent('chatwoot:ready');
expect(dispatchEvent).toHaveBeenCalled();
});
});

View File

@@ -20,4 +20,8 @@ window.chatwootSettings = {
}) })
} }
})(document,"script"); })(document,"script");
window.addEventListener('chatwoot:ready', function() {
console.log(window.$chatwoot)
})
</script> </script>

View File

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