fix: AudioContext warning when loading widget on Chrome (#3956)

* fix: AudioContext warning when loading widget on Chrome

* minor fixes

* Minor fixes

* adds event on document

* Play audio from parent window through SDK

* Adds notification to dashboard

Co-authored-by: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com>
Co-authored-by: Vishnu Narayanan <vishnu@chatwoot.com>
This commit is contained in:
Sivin Varghese 2022-02-28 21:43:24 +05:30 committed by GitHub
parent eee89bf0d8
commit a3cb26a317
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 58 additions and 11 deletions

View file

@ -26,6 +26,10 @@ import { dispatchWindowEvent } from 'shared/helpers/CustomEventHelper';
import { CHATWOOT_ERROR, CHATWOOT_READY } from '../widget/constants/sdkEvents';
import { SET_USER_ERROR } from '../widget/constants/errorTypes';
import { getUserCookieName } from './cookieHelpers';
import {
getAlertAudio,
initOnEvents,
} from 'shared/helpers/AudioNotificationHelper';
import { isFlatWidgetStyle } from './settingsHelper';
export const IFrameHelper = {
@ -114,6 +118,18 @@ export const IFrameHelper = {
iframe.setAttribute('style', `height: ${updatedIframeHeight} !important`);
},
setupAudioListeners: () => {
getAlertAudio().then(() =>
initOnEvents.forEach(event => {
document.removeEventListener(
event,
IFrameHelper.setupAudioListeners,
false
);
})
);
},
events: {
loaded: message => {
Cookies.set('cw_conversation', message.config.authToken, {
@ -136,6 +152,15 @@ export const IFrameHelper = {
if (window.$chatwoot.user) {
IFrameHelper.sendMessage('set-user', window.$chatwoot.user);
}
dispatchWindowEvent({ eventName: CHATWOOT_READY });
window.playAudioAlert = () => {};
initOnEvents.forEach(e => {
document.addEventListener(e, IFrameHelper.setupAudioListeners, false);
});
if (!window.$chatwoot.resetTriggered) {
dispatchWindowEvent({ eventName: CHATWOOT_READY });
}
@ -214,6 +239,10 @@ export const IFrameHelper = {
closeChat: () => {
onBubbleClick({ toggleValue: false });
},
playAudio: () => {
window.playAudioAlert();
},
},
pushEvent: eventName => {
IFrameHelper.sendMessage('push-event', { eventName });